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

时间:2017-02-09 22:14:32

标签: c escaping user-input ctrl

我目前正在为类分配,我们必须编写一个从命令行获取用户输入的程序。

程序应继续从用户那里获取输入,直到在自己的行上写入Ctrl + d字符。

例如:

%。/测试

  • 这是一些文字
  • 这是一个新行
  • CTRL + d

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

到目前为止,我有这个:

char c;

printf("- ");

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

但是当我在执行时键入ctrl + d时它不会退出,任何帮助都会非常感激。

此外,我希望这可以在我的Mac上工作,所以如果有人可以阐明是否有不同的方法来做到这一点(因为cmd + d只是拆分终端窗口),这也将非常感激。

提前致谢!

2 个答案:

答案 0 :(得分:0)

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

请注意,提出这些问题时最好的办法是先将问题写入谷歌(bing,yahoo等)。

答案 1 :(得分:0)

以下是您问题的简单解决方案:

#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或d后面的ctrl键。因为用户执行ctrl + d或d + ctrl,你可以用这个循环捕获它,使它看起来与上面这个例子完全一样。我知道这只是一个非常草率的解决方案,但确实有效。

抱歉,我的MAC问题什么都没有,因为我没有人来测试它。

祝你好运