gpt4 book ai didi

Control-D 结束 getchar 而不是程序,prog 继续接收变量中的垃圾值?

转载 作者:行者123 更新时间:2023-12-02 15:24:26 24 4
gpt4 key购买 nike

我正在接受用户输入的单个字符。该程序继续使用 getchar 获取字符,直到遇到非空格字符,然后使用该字符打印显示。

如果用户输入 control-D 而不是字符,则 getchar 输入终止,程序也应该终止。

   char border;
printf("Enter the character for the border: ");
while ((border = getchar()) != EOF && border != '\n') {
if (!isspace(border)){
break;
}
}

除非我输入 control-D,否则循环终止...并且程序将垃圾字符 ▒▒ 分配给边框,然后继续执行程序。

我试过 if (!border) { return 1; } 并尝试在与 ▒▒ 相比的边界为真时返回 1,但无论哪种方式都没有骰子。

这是怎么回事,我该如何处理?

最佳答案

按 CTRL+D 不会终止程序。相反,它会关闭 stdin 输入流。大多数命令行实用程序旨在执行某些操作,然后在发生这种情况后终止。将此与 CTRL+C 对比,CTRL+C 向程序发送终止信号。

您的代码目前通过将 getchar() 的返回值分配给 border 来工作,因此如果 getchar 返回 EOF,它会将 EOF 分配给 border,然后退出循环.您可以通过在循环后检查边界是否等于 EOF 来测试是否发生了这种情况。

正如@Olaf 所指出的,这里还有另一个问题。请注意,border 是一个 char 并且 getchar 返回一个整数。将 border 的类型更改为 int 以防止稍后在您的代码中出现问题。

希望这对您有所帮助!

关于Control-D 结束 getchar 而不是程序,prog 继续接收变量中的垃圾值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31015948/

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