gpt4 book ai didi

C: Ctl+D 退出程序

转载 作者:行者123 更新时间:2023-11-30 19:08:56 27 4
gpt4 key购买 nike

我用 C: 编写了这个函数

int process_list(node_t *head){
char c;
node_t *prev = head; /* Define pointer to point the previous node */
head->next = NULL;
head->data = getchar(); /* Insert the first char to the head's data property */
if ( head->data == EOF ) {
return head;
}

while ( (c = getchar()) != EOF ) {
node_t *current = (node_t *) malloc(sizeof(node_t));
current->data = c;
current->next = NULL;
prev->next = current;
prev = current;
}

print_list(head);

return 1;
}

我想检查程序,所以为了模拟 EOF,我被告知我需要使用 ^D (ctrl+D)。但是,当我使用它时,它只是停止程序,并且我看不到 print_list 应显示的输入。结果是: enter image description here

但是想要的结果(我通过替换 '\n' 中的 EOF 来模拟它,然后按 Enter 键): enter image description here

函数print_list:

void print_list(node_t *head) {
node_t * current = head;

printf("The input is:\n");

while ( current != NULL ) {
printf("%c", current->data);
current = current->next;
}

printf("\n");

free_list(head);
}

知道为什么 EOF 终止程序吗?提前致谢!

最佳答案

while ( (c = getchar()) != EOF ) 循环不正确,因为 c 的类型为 char

getchar() 返回 int 类型的值,该值可以是可以使用 unsigned char 表示的值,也可以是 >EOF - 这是一个实现定义的值,通常不能存储在 char 中。

c 的类型更改为 int,而不是 char

以下注释特定于 Unix。

要按预期工作,用户需要在行首输入 CTRL-D(输入到程序的第一个字符,或紧接在换行符之后)。

如果在一行中的字符后按下 CTRL-D,则需要键入两次。第一个 CTRL-D 将导致在不关闭 stdout 的情况下读取前面的字符,并且下一次调用 getchar() 将等待另一个字符。此时,第二个 CTRL-D 将关闭 stdout,通常会导致 getchar() 返回 EOF(并输入 CTRL- 以外的内容) D 只是表示继续阅读)。

在您的情况下,由于您只输入一个 CTRL-D 而不是在一行的开头,因此您运行程序的环境(例如调试器)要么超时,要么也检测到 CTRL-D ,并导致程序终止。但这只是一种可能性 - 您没有提供足够的信息来确认这一点。

除了使用直接读取击键的技术之外,没有其他解决方法 - 这对于标准 C 来说是不可能的。同样,标准 C 中也不需要强制人类用户采取行动的方法。

关于C: Ctl+D 退出程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44045414/

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