有人可以告诉我这里出了什么问题吗?

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

#define ERROR 0
#define MAX_INPUT_LINE 80
#define print(x) {fputs(x,stdout);}
#define SUCCESS 1

int main (long argc, char *argv[])
{
   int mode;
   printf("1 for hexidecimal or 2 for binary");
   scanf("%d", mode);

   printf("\n\n\nThe value of mode is %d\n", mode);
   return 0;
}

当我输入 2 作为二进制文件时,我得到以下信息:
The value of mode is 2665564

显然我应该得到2,我在做什么错?是我的编译器,是因为我正在使用Cygwin吗?为什么模式不是2?

最佳答案

这是C,而不是Java。当您使用诸如scanf (...)之类的函数时,由于您无法通过引用传递变量,因此您应该传递一个指向将保存该值的变量的指针。

请改用以下内容:

scanf ("%d", &mode);

(&)的使用将通过address-of模式,而不是隐式地将模式强制转换为(int *)

在此示例中,您实际上很幸运,这没有导致程序崩溃。如果mode的值为0,并且为了满足该功能而强制转换为指针,则可以取消引用NULL指针。

关于c - 为什么scanf无法正确读取该值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18822602/

10-15 00:15