[英]Printf show the wrong number
char n[100];
int u[100];
int x[8];
scanf("%[^\n]",&n);
scanf("%d %d",&x,&u);
printf("%s\n",n); //print correct
printf("%d\n",x); //print not the exact number i input in scan
printf("%d\n",u);// print not the exact number i input in scan
如果我输入 x 和 u for ex: 12345678 20 输出将打印:随机数
对于%[^\\n]
, scanf
需要一个指向char
的指针(这是第一个足够接收字符串的char
),但&n
是一个指向char
数组的指针。 更改scanf("%[^\\n]",&n);
到scanf("%[^\\n]", n);
. 尽管n
是一个char
数组,但当像这样使用时,它会自动转换为指向其第一个元素的指针,因此将传递指向char
的指针。
对于%d
, scanf
需要一个指向int
的指针,但&x
和&u
是指向int
数组的指针。 改变int u[100];
给int u;
和int x[8];
到int x;
. 然后,在scanf("%d %d",&x,&u);
, 指向int
指针将被传递。
在printf("%s\\n",n);
,对于%s
, printf
需要一个指向要打印的几个char
的第一个的指针,并且n
会自动转换为指向其第一个元素的指针,所以这是正确的。
在printf("%d\\n",x);
,对于%d
, printf
需要一个int
。 以前,当x
是一个数组时,它会传递一个指向数组中第一个int
的指针。 然后printf
可能已经将指针打印为一个int
,但是这可能会出现各种问题。 使用上面显示的更正的x
定义,这将传递x
的值而不是指针,因此它是正确的。
同样, printf("%d\\n",u);
一旦u
的定义从数组更改为单个项目,就会正确。
在编译器中打开警告并注意它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.