繁体   English   中英

printf 显示错误的数字

[英]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的指针。

对于%dscanf需要一个指向int的指针,但&x&u是指向int数组的指针。 改变int u[100]; int u; int x[8]; int x; . 然后,在scanf("%d %d",&x,&u); , 指向int指针将被传递。

printf("%s\\n",n); ,对于%sprintf需要一个指向要打印的几个char的第一个的指针,并且n会自动转换为指向其第一个元素的指针,所以这是正确的。

printf("%d\\n",x); ,对于%dprintf需要一个int 以前,当x是一个数组时,它会传递一个指向数组中第一个int的指针。 然后printf可能已经将指针打印为一个int ,但是这可能会出现各种问题。 使用上面显示的更正的x定义,这将传递x的值而不是指针,因此它是正确的。

同样, printf("%d\\n",u); 一旦u的定义从数组更改为单个项目,就会正确。

在编译器中打开警告并注意它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM