我正在编写一个从文件中读取行的程序 我需要打印出数字,读取的行存储在一个字符数组中:
char line[255];
//code to read line from file here
for (c=0;c<256;c++)
{
if (line[c]<58 && line[c]>47)
printf("the character is: %c\n",line[c]);
}
配置文件包含以下行:
buttons 3
我想得到的结果是the character is 3
,而是3,9,4,4
希望我提供了足够的信息。 感谢
答案 0 :(得分:1)
你的if语句错了。
你可以更清楚,更正确地表达它:
if ('0' <= line[c] && line[c] <= '9')
{
printf("the character is: %c\n",line[c]);
}
您的循环运行256个字符,即使"buttons"
的输入只有7个字符。你正在逃避不属于你的记忆,可能会随机发现9,4,4。
你想:
for (int c=0; c < 256; ++c)
{
if (line[c] == '\0') // If the end of the input is found, stop the loop.
{
break;
}
if ('0' <= line[c] && line[c] <= '9')
{
printf("the character is: %c\n",line[c]);
}
}
答案 1 :(得分:1)
abelenky帖子的延伸:
abelenky提出了解决问题的2个问题。编写代码的一个重要方面是可读性。 abelenky的第一个解决方案最大化了可读性。
if (line[c] >= '0' && line[c] <= '9')
{
printf("the character is: %c\n",line[c]);
}
每个人都知道ASCII字符被映射到整数值,但不是每个人都可以轻松地回想起与每种类型的字符(数字,字母,大写字母等)相关的值范围。
这就是C支持单引号的原因:''
可以合理地假设整数的ASCII值与0-9的整数一样递增,因此在条件语句中使用“0”和“9”可以提高可读性。采用更易读的代码风格将改善您和查看代码的任何人的生活。
快乐的编码!