0

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main(){
    int noteven=0, n;

    printf("Input numbers, at the end write 0 \n");
    n=1;

    while(n!=0){
        scanf("%d", n);
            if (n%2==1){
                noteven++;
            }
    }
    printf("Not even numbers quantity: %d", noteven);
}

输入数字后,终端出现错误。谁能解释为什么这不起作用?

4

2 回答 2

2

scanf需要一个指向n

scanf("%d", &n);

这意味着:

  1. 从键盘扫描字符串
  2. 将其解释为整数(即%d​​ )
  3. 把它放在地址n&in的&n意思是“地址” n

没有&,它说的是:

  1. 从键盘扫描字符串
  2. 将其解释为整数(即%d​​ )
  3. n(当前未初始化,因此它包含垃圾)的值,并将该值用作内存中的地址,并将数字存储在那里。

基本上,您是在告诉scanf在内存中的某个随机位置写入一个整数。你很幸运,它只是以分段错误结束。

于 2013-11-13T19:43:45.217 回答
2

scanf 需要它可以存储它读取的值的地址,因此按如下方式使用它:

scanf("%d", &n);
于 2013-11-13T19:45:04.693 回答