当用户在 C 中输入 Ctrl+d 时退出程序

Exiting a program when user enters Ctrl+d in C

我目前正在为 class 完成一项作业,其中我们必须编写一个从命令行获取用户输入的程序。

程序应继续接受用户的输入,直到在其自己的行上写入 Ctrl+d 字符。

例如:

%./测试

程序将在最后一行后停止('-' 字符只是为了向用户表明他们仍在输入文本)。

到目前为止我有这个:

char c;

printf("- ");

while (c != EOF) {
    scanf(" %c", &c);
    printf("- ");
}

但是当我在执行时键入 ctrl+d 时它不会退出,我们将不胜感激。

我也希望它能在我的 mac 上工作,所以如果有人可以阐明是否有其他方法可以做到这一点(因为 cmd+d 只是拆分终端 window), 也将不胜感激。

提前致谢!

使用 termios -> 顺便说一句,我保证这个问题已经被回答了几十次,但我会 post 在这里再次回答:https://en.wikibooks.org/wiki/Serial_Programming/termios.

请注意,提出这些问题时最好先将问题放入 google(bing、yahoo 等)。

这里有一个简单的方法可以解决您的问题:

#include<stdio.h>

main()
{

   char c;

    int flag=0;

printf("- ");

while (flag != EOF) {
    flag = scanf(" %c", &c);
    printf("- ");

}
return 0;
}

对多个按键按钮使用 Scanf 使其更难捕捉。您应该使用 scanf 的结果而不是 scanf 分配,这将为您提供正确的 EOF 结果。

还有

在更棘手的情况下,您需要多个密钥但没有像 EOF 这样的准备好的东西。您可以尝试模拟 scanf 循环来检查是否让 ctrl 键后跟 d 或 ctrl 后的 d。因为用户执行 ctrl+d 或 d+ctrl 并且您将能够使用此循环捕获它,以使其看起来与上面的示例完全一样。我知道这只是一个非常草率的解决方案,但它确实有效。

抱歉,我没有解决您的 MAC 问题,因为我没有可以用来测试它的工具。

祝你好运