【问题标题】:Exiting a program when user enters Ctrl+d in C当用户在 C 中输入 Ctrl+d 时退出程序
【发布时间】:2017-02-09 22:14:31
【问题描述】:

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

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

例如:

%./测试

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

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

到目前为止,我有这个:

char c;

printf("- ");

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

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

我也希望这可以在我的 mac 上工作,所以如果有人可以阐明是否有不同的方法可以在那里执行此操作(因为 cmd+d 只是拆分终端窗口),那也将不胜感激。

提前致谢!

【问题讨论】:

  • while (scanf(" %c", &c) == 1)
  • 这样你永远不会得到EOF!阅读`你使用的函数的文档!

标签: c escaping user-input ctrl


【解决方案1】:

这是解决问题的简单方法:

#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 问题我一无所获,因为我没有可以测试它的设备。

祝你好运

【讨论】:

    【解决方案2】:

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

    请注意,提出这些问题时最好的办法是先将您的问题放到 google(bing、yahoo 等)中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 2017-12-03
      • 2019-03-19
      • 2021-12-11
      相关资源
      最近更新 更多