我的代码是...
#include <stdio.h>
int main(){
char name[20];
int age;
char department;
double key;
int i=0;
while( (scanf("%c", &name[i])) == 1 ){
i++;
}
name[i] = '\0';
scanf("%d", &age);
scanf("%c",&department);
scanf("%lf",&key);
puts(name);
printf ("%d\n",age);
printf("%c\n",department);
printf("%g",key);
return 0;
}
输入值为
mark
20
A
3.154
结果输出应与输入相同
mark
20
A
3.154
但是我得到的是...
mark
20
A
3.154
32766
�
我不知道在哪里
32766
�
来自...
最佳答案
代码
while( (scanf("%c", &name[i])) == 1 ){
i++;
}
将读取它可以读取的所有字符,并且不会在
mark
的结尾处停止。因此,该循环将全部四行读取到
name
中,然后scan
调用失败,因为没有更多输入,这意味着age
,department
和key
值被保留在创建时具有任意价值。换句话说,您的输出可以这样解释:
mark \
20 \
A >-- name
3.154 /
/
32766 -- age (and probably nul for department)
� -- key
如果要进行基于行的输入,this answer提供了方便的功能,包括缓冲区溢出保护等。对于字符串,只需按输入的方式使用它们,而非字符串可以使用缓冲区上的
sscanf
进行转换。关于c - 为什么打印垃圾值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54564991/