Online Compiler C

#include<stdio.h> const int N=1000; int main() { char str[N+1]; int i=0; char c; while(c=getchar()!='\n'); { str[i]=c; i++; } str[i]='\0'; int k=0; while(str[k]!='\0') { k++; } while(k>=0) { printf("%c",str[k]); k--; } return 0; }
这段代码试图从输入读取一行字符,然后反向输出。但代码中存在几个关键错误,导致它无法正常工作。

第一个错误在 while 循环的条件中:`while(c=getchar()!='\n')`。由于运算符优先级问题,`!=` 的优先级高于 `=`,所以实际执行的是 `c = (getchar() != '\n')`,即 c 被赋值为比较结果(0 或 1),而不是读取的字符。这导致循环逻辑完全错误。

第二个错误是 while 循环后面多了一个分号,导致循环体为空,而后面的大括号内的代码只执行一次,且此时 c 的值是 0 或 1。

- 检查运算符优先级:赋值运算符 `=` 的优先级低于比较运算符 `!=`,需要添加括号来确保先赋值再比较。
- 注意 while 循环后面不要加分号,否则循环体为空。