gpt4 book ai didi

c - 在 C 中运行 putchar() 函数时 'enter' 输入如何工作?

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:26 24 4
gpt4 key购买 nike

我测试了这段代码:

  1 #include <stdio.h>
2
3 main()
4 {
5 int c;
6
7 while ((c = getchar()) != EOF) {
8 putchar(c);
9 printf("%d ", c);
10 }
11 printf("%d\n", c);
12 }

问题:

当我输入一行字符,然后输入一个'enter'时,我得到了这样的结果:

asdf

a97 s115 d100 f102

当我直接在一行字符后面添加一个 EOF(ctrl+d) 时,我得到了直接在输入后面的结果,比如:

asdfa97 s115 d100 f102

我的问题是“输入”是否触发代码运行?为什么当我输入 EOF 时,输出结果不需要“输入”?为什么我需要另一个 EOF 才能停止运行?

非常感谢。

最佳答案

对于您的第一个案例,您确定输出不是:

asdf
a97 s115 d100 f102
10

也就是说,您的输入行 asdf 下一行是 'a''s' 的输出字符和数字、'd''f',然后是 另一 行(因为您 putchar() 换行字符)上面有 10(换行符的 ASCII 值)?

请注意,此时您的程序也不会退出 - 它仍在等待更多输入。

^D 也不是输入 EOF“字符”。它只是向您的终端程序发送信号。在您的情况下,它看起来像是“刷新缓冲区”的意思,因此您的程序可以访问终端的 “asdf” 行缓冲输入。由于您的程序不输出换行符,因此您会在同一行获得输出。

如果您输入 ^D 单独一行,您将导致终端关闭与您的程序和实际 EOF 将通过,终止您的程序。

示例 - 输入“asdf\n”:

# ./example 
asdf
a97 s115 d100 f102
10

示例 - 输入“asdf^D”:

$ ./example 
asdfa97 s115 d100 f102

示例 - 输入“asdf\n^D”:

$ ./example 
asdf
a97 s115 d100 f102
10 -1

关于c - 在 C 中运行 putchar() 函数时 'enter' 输入如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24441336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com