程序在每次输入后打印一个值为10的额外行

时间:2013-09-19 12:51:18

标签: c printf getchar

我有这个简单的程序:

#include <stdio.h>

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

    return 1; 
}

但是出于某种原因,在执行时我最终得到了额外的值10:

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; 
}

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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

  4. 第一种方法也可用于检查不可打印的字符(请参阅isprint),以及其他类别的字符(如果要对它们进行特殊打印)(查看这些character classification函数)