为什么这个C程序在输出中打印奇怪的字符?

我有以下程序:
#include <stdio.h>

int main()
{
        int ch;
        while( ch = getchar() != '\n') {
                printf("Read %c\n",ch);
        }  
        return 0;
}

无论我输入什么,我得到:

Read

为什么会发生这种情况,我看到的奇怪的是什么?

Stackoverflow不会打印奇怪的字符.你可以在这里看到它:http://ideone.com/EfZHr

解决方法

您需要将括号括起来:
while( (ch = getchar()) != '\n')

07 =的!=大于=的

while( ch = getchar() != '\n')

与:

while( ch = (getchar() != '\n') )

读取char将其与换行符进行比较,然后将比较结果分配给ch.现在比较的结果是0(输入换行时)或1(输入任何其他内容时)

您看到的奇怪的字符是control char,值为1,ASCII 1没有可打印的符号,所以我猜它的shell打印出值为0001的奇怪字符.

您可以通过将程序输出传递给八进制转储(od)来确认它:

$echo 'a' | ./a.out | od -bc         # user entered 'a'
0000000 122 145 141 144 040 001 012
          R   e   a   d     001  \n
here you go  ----------------^


$echo '\n' | ./a.out | od -bc        # user entered '\n'
0000000

GCC与-Wall一起使用时会警告您:

warning: suggest parentheses around assignment used as truth value

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...