我有这个简单的程序:
#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;
}
答案 0 :(得分:6)
这是您为输入输入的换行符。它的ASCII值为10。
以下是“停止”它的三种方法:
在循环中添加if
检查以检查它,并仅在不是换行符时打印。
使用fgets
一次读取一个完整的行,从字符串中删除换行符(fgets
添加它)并循环遍历字符串并打印每个字符。
使用scanf
读取字符。如果格式中有前导空格,它将跳过像换行符这样的空格。
第一种方法也可用于检查不可打印的字符(请参阅isprint
),以及其他类别的字符(如果要对它们进行特殊打印)(查看这些character classification函数)