我正在使用命令行将文本文件输入到程序,该程序使用文件中的信息来显示其他值,以根据该文本文件中的内容进行显示。
test.exe <input.txt(命令行)
文件看起来像这样:
2
abc 123
qwe 456
数字2告诉我程序必须读取多少东西。(在代码中命名为COUNT)
double number[MAXVALUE];
char name[MAXVALUE][MAXLENGTH];
for(i = 0; i < COUNT; i++)
{
scanf("%s %lf", name[i], &number[i]);
}
这就是输入代码的样子。
现在,发生的是如果我将3作为COUNT,程序将尝试读取3行并将第3行显示为乱码。如果输入的值不存在,如何防止scanf运行?
我很累,if(scanf(....) != 1)
但似乎没有用。
首先,避免调用未定义的行为 %lf
是为了阅读double
,而不是int
。
然后,的返回值scanf()
对于检查读取是否成功很有用。
引用自N1570 7.21.6.4 scanf函数,第3段:
如果在第一次转换(如果有)完成之前发生输入失败,则scanf函数将返回宏EOF的值。否则,scanf函数将返回分配的输入项目数,如果早期匹配失败,该数目可能少于所提供的输入项数,甚至为零。
这是一个改进的代码示例:
double number[MAXVALUE];
char name[MAXNAME][MAXLENGTH];
for(i = 0; i < COUNT; i++)
{
if (scanf("%s %lf", name[i], &number[i]) != 2)
{
fputs("read error\n", stderr);
exit(1); /* stdlib.h should be included to use this */
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句