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