2015-07-10 22 views
0

所以這可能是一個簡單的修復,但我似乎無法弄清楚。通過函數獲取垃圾代替變量

用戶輸入N輸入一個數字。 然後用戶輸入F將Fibonacci序列打印到該編號。

我原來的打印0-20(工作代碼)已被註釋掉。我嘗試以同樣的方式設置斐波那契,但打印數字時會發生垃圾。我現在已經將它設置爲在for循環之前暫停的位置,以便我可以看到它得到的數字。

#include <stdio.h> 

char menu(); 
int read_int(int number); 
void display(int answer); 

int main(int argc, char ** argv) { 
    int number = 0;  
    char choice = 'O'; 
    while (choice != 'X'){ 
     choice = menu();  

     if (choice != 'N' && choice != 'F' && choice != 'X') { 
      printf("Invalid Input. Enter N, F, or X\n"); 
     } 

     else if (choice == 'N') { 
      number = read_int(number); 
      printf("\nNumber equals: "); 
      printf("%d", number);   
     } 

     else if (choice == 'F') { 
      //printf("\nNumber equals: "); 
      //printf("%d", number);   
      display(number);    
     } 
    } 
} 


char menu() 
{ 
    char i; 
    printf("\nEnter N to enter an integer from 0 to 20\nEnter F to display the first N+1 numbers (beginning with zero) on the console \nEnter X to quit the program \n"); 

    printf("Your Choice: "); 
    scanf("%s", &i); 
    return i; 
} 

int read_int(int number) 
{ 
    number = 0; 
    printf("\nEnter an integer 0-20: "); 
    scanf("%d", &number); 
    if (number >=0 && number <=20) 
     return number; 
    else{ 
     printf("Enter a valid number between 0 and 20");  
     return read_int(number); 
    } 
} 

void display(int answer) 
{ 
// int count = 0; 
// //printf("\nNumber equals: "); 
// //printf("%d", answer); 
// //int toprint = answer; 
// while (count <= answer){    
//  printf("%d",count); 
//  printf(" , "); 
//  count=count+1; 
    //int n = answer; 
    int n = 0; 
    n = answer; 
    int first = 0, second = 1, next, c; 

    //printf("Enter the number of terms\n"); 


    printf("\nNumber equals: "); 
    printf("%d", &answer); 
    scanf("%d",&n); 
    for (c = 0 ; c < answer ; c++) 
    { 
     if (c <= 1) 
     next = c; 
     else 
     { 
     next = first + second; 
     first = second; 
     second = next; 
     } 
     printf("%d\n",next); 
    } 

    //return 0; 
} 
+2

'printf(「%d」,&answer);'看起來很懷疑。 – Michael

回答

4

在你的情況下,問題是由

scanf("%s", &i); 

%s創建期望一個指針指向一個char陣列,而不是一個單一的char元件。即使只輸入一個char,也會造成內存溢出,導致內存溢出undefined behaviour

您可以替換與

scanf(" %c", &i); 

此外,printf("%d", &answer);看起來錯了,我想你的意思並不是說&在那裏。

+0

我添加了&試圖讓它工作。將其更改爲%c並刪除&解決了該問題,但導致了另一個問題。我可以修復它。知道這是簡單的,只是無法弄清楚! – user3866044