2

我有这个简单的程序:

#include <stdio.h>

int main()
{
    int c;
    while ( ( c = getchar()) != EOF)
        printf("%d %c\n", c, c);

    return 1; 
}

但是由于某种原因,在执行时我最后得到了一个额外的值十:

a
97 a
10 

b
98 b
10 

abc
97 a
98 b
99 c
10 

值 10 是多少,它来自哪里?我如何阻止它发生?

解决方案:

#include <stdio.h>
#include <ctype.h>

int main()
{
    int c;
    while ( ( c = getchar()) != EOF)
    {
        if ( isprint (c))
        {
            printf("%d %c\n", c, c);
        }
    }

    return 1; 
}
4

1 回答 1

6

这是您为输入输入的换行符。它的 ASCII 值是 10。

以下是“停止”它的三种方法:

  1. 在循环中添加一个if检查以检查它,并且仅在它不是换行符时打印。

  2. 用于fgets一次读取一整行,从字符串中删除换行符(fgets添加它)并遍历字符串并打印每个字符。

  3. 用于scanf读取字符。使用格式中的前导空格,它将像换行符一样跳过空格。

第一种方法也可用于检查不可打印的字符(请参阅 参考资料isprint),如果您想为它们进行特殊打印,还可以检查其他类别的字符(查看这些字符分类函数)。

于 2013-09-19T12:53:56.633 回答