为什么C中的函数printf(“%s”,c)在Clion中不起作用?按Enter键时如何区分'\ n'和EOF

时间:2016-12-30 02:56:43

标签: clion

enter image description here

如果我为几行输入一些单词然后按“Enter”两次,则代码结束时没有任何输出。 初学者真的需要帮助!

1 个答案:

答案 0 :(得分:0)

它与您使用的编译器无关,而与您的C standard library实现无关。如果更改编译器,行为可能会保持不变。

您应该花更多的时间研究C language及其标准库的功能。

<stdio.h>函数是buffering(这就是为什么它们有效:为每个输出字符设置system call非常慢。)

默认情况下, stdout 通常是行缓冲的(至少它是一个终端)。另请参阅setvbuf

因此,您应该使用printf明确调用fflush来终止\n的控制格式字符串

BTW,请注意POSIX指定了getline函数。在POSIX系统上,您最好使用它而不是定义一些类似功能的GetLine

另外,请养成在编译器中启用所有警告和调试信息的好习惯(注意Clion不是您的编译器,而是运行某些编译器的IDE)。如果使用GCC编译gcc -Wall -Wextra -g。用Clang编译clang -Wall -g。改进代码,直到你没有警告。然后使用调试器(例如gdb)逐步运行代码并查询程序状态。

另请注意(int)"\n"(与(int)'\n'不同)很可能是错误的(并且您无法轻易预测其值,例如因为ASLR),因为它将一些常量字面值的地址转换为整数(实际上没有意义)。

Kernighan&amp;里奇在C上写了一篇很棒的textbook