寻找字符数组中的数字

时间:2015-07-01 20:16:47

标签: c

我正在编写一个从文件中读取行的程序 我需要打印出数字,读取的行存储在一个字符数组中:

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

希望我提供了足够的信息。 感谢

2 个答案:

答案 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”可以提高可读性。采用更易读的代码风格改善您和查看代码的任何人的生活。

快乐的编码!