我有以下程序:
#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