【问题标题】:Program prints an extra row with value 10 after each input程序在每次输入后打印一个值为 10 的额外行
【发布时间】:2013-09-19 12:51:18
【问题描述】:

我有这个简单的程序:

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

【问题讨论】:

  • 10 是换行符的 ascii 代码 (\n)

标签: c printf getchar


【解决方案1】:

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

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

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

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

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

第一种方法也可用于检查不可打印的字符(请参阅isprint),如果您想对其他类型的字符进行特殊打印(请参阅这些character classification 函数)。

【讨论】:

  • 好的,所以 10 是 ASCII 值,10 之后的空行是换行符的 %c?
  • 谢谢!使用 isprint 我能够将其删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多