c - 验证表达式 getchar() != EOF 是 0 或 1,ctrl-D 得到 "0D",而不是 "0"

标签 c

我正在学习《C 编程语言》,作者:Kernighan 和 Ritchie(第 2 版),第 17 页的练习 1.06

我的问题是为什么每次我输入ctrl-d时,它都会打印“0D”,而不是“0”,我的电脑是iMAC m1芯片。谢谢

#include <stdio.h>

main()
{
    printf("%d\n", getchar() != EOF);
}

最佳答案

您的观察结果的原因是,当您键入 Ctrl-D 时,终端会回显 ^D 和 2 个退格键 (BS) 并返回 4立即地。效果是光标位于屏幕上的 ^ 字符上,当 printf 输出 0 和换行符时,0 code> 覆盖 ^ 并且换行符转换为 CR+LF,导致光标转到下一行的开头。

您可以修改程序以避免此问题,方法是在 %d 转换之前打印换行符:

#include <stdio.h>

int main(void) {
    printf("\n%d\n", getchar() != EOF);
    return 0;
}

输出:

^D
0

关于c - 验证表达式 getchar() != EOF 是 0 或 1,ctrl-D 得到 "0D",而不是 "0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76958943/

相关文章:

const 参数在数组定义后发生变化

c - 为什么我的 GTK+ 信号回调中出现段错误?

c - C 中的数组传递

c++ - 哪里可以找到这个函数的源代码?

C - 结构制造商函数导致不同的错误

将 BCD 码转换为无符号字符

c - 错误 'sscanf_result' 未声明(在此函数中首次使用)

c - 如何从外部 c 文件的函数返回 *uint8_t(数组)到 main.c

C函数参数作为指针

c - 如何使线程操作的结果对进程中的所有其他线程可见?