【问题标题】:Getting garbage instead of variable when passing through functions [duplicate]通过函数时获取垃圾而不是变量[重复]
【发布时间】:2015-07-10 16:30:23
【问题描述】:

所以这可能是一个简单的解决方法,但我似乎无法弄清楚。

用户输入N 以输入数字。 然后用户输入 F 以将斐波那契数列打印到该数字。

我的原始打印 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;
}

【问题讨论】:

  • printf("%d", &amp;answer); 看起来很可疑。

标签: c scanf


【解决方案1】:

在您的情况下,问题是从

 scanf("%s",  &i);

%s 需要一个指向 char 数组的指针,而不是单个 char 元素。即使对于单个char 输入,这也会造成内存溢出,从而导致undefined behaviour

您可以将其替换为

 scanf(" %c", &i);

另外,printf("%d", &amp;answer); 看起来不对,我认为您的意思并不是说 &amp; 在那里。

【讨论】:

  • 我添加了 & 试图让它工作。将其更改为 %c 并删除 & 确实解决了该问题,但导致了另一个问题。不过我可以修复它。知道这很简单,就是想不通!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
相关资源
最近更新 更多