c - 为什么要打印垃圾值?
问题描述
我的代码是...
#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
如果你想做基于行的输入,这个答案提供了一个方便的功能,有缓冲区溢出保护等等。对于字符串,您只需按输入使用它们,而非字符串可以sscanf
在缓冲区上使用转换。
推荐阅读
- swift - 通过点击 Mapkit 中的 Annotation 触发 NavigationLink
- node.js - Sequelize:使用源中的多个键来包含目标模型
- r - 将数据集转换为在 R 中结合列和行的整洁格式
- powershell - 如何在控制台中关闭语法突出显示?视窗 10 2020
- tensorflow - keras tensorflow metric 总是计算损失
- javascript - Vuejs javascript模块导入“TypeError:不是构造函数”
- r - 条形图中正负条的不同条颜色
- sql - SQL Server - 使用内部查询自联接更新值的代码
- reactjs - 历史和路由器不适用于电子
- r - 在ggplot中绘制多个变量的趋势线和方程