2017-10-20 34 views
0

我正在編寫一個C程序來獲得斐波納契數字,用戶需要把前2個數字和序列從那裏開始。這裏是我的代碼:斐波納契序列用戶輸入前2個數字

#include <stdio.h> 
#define MAX_SIZE 100 

int main() 
{ 
    int i, input[MAX_SIZE]; 

    printf("please Enter first 2 digit of the Sequence\n"); 

    scanf("%d, %d" , &input[0], &input[1]); 

    for (i = 2; i < MAX_SIZE; i++) 
    { 
     input[i] = input[i-2] + input[i-1]; 

    printf("%d\n", input[i]); 
    } 

    return 0;  
} 

但是當我運行一個輸入2和3的代碼中,我得到這樣一個1499141456輸出,這顯然不是序列。請幫忙。

+0

是不是好些了嗎?我不明白你通過刪除逗號,我得到2用戶輸入。 – user2962635

+0

檢查'scanf'的返回值。如果不是2,那麼它不會讀取兩個數字,而它沒有讀取的數字是未定義的(可能是任何東西)。您的'scanf'格式爲'%d,%d',這意味着它需要兩個數字之間的逗號。如果在提示時沒有輸入逗號,則不會解析第二個數字。 –

回答

0

這是因爲結果在你的代碼是更大的最高值int可以處理

Live example here!

Wikipedia

數2,147,483,647(或十六進制7FFF,FFFF )的最大值爲 正值計算中的32位帶符號二進制整數。因此,對於很多視頻遊戲而言,許多編程語言中聲明爲整數的變量(例如, 作爲int)的最大值爲 ,並且最大可能分數爲 。

這裏就是它出錯

[...] 
433494437 + 701408733 = 1134903170 
701408733 + 1134903170 = 1836311903 
1134903170 + 1836311903 = -1323752223 
1

當從循環i出口等於MAX_SIZE

printf("%d\n", input[i]); 

要打印的陣列(input[MAX_SIZE])的範圍之外的值。

+1

'input [size]'不僅是未初始化的,而是未分配的''input'從'0'變爲'size-1' – Steve

+0

@Steve,oops,這個問題在這個答案後被編輯,但你是正確的 –

0

把印刷語句放在循環括號中。

or (i = 2; i < MAX_SIZE; i++) 
    { 
    input[i] = input[i-2] + input[i-1]; 
    printf("%d\n", input[i]); 
    } 
+0

好吧所以我在循環內添加了print語句,輸出如下:1280719746 -1597741950 -181236350 – user2962635

+0

並刪除scanf中的%d,%d之間的逗號並將其設置爲scanf(「%d%d」 ,&input [0],&input [1]); – NeerajMalhotra