当用户在 C 中输入 Ctrl+d 时退出程序
Exiting a program when user enters Ctrl+d in C
我目前正在为 class 完成一项作业,其中我们必须编写一个从命令行获取用户输入的程序。
程序应继续接受用户的输入,直到在其自己的行上写入 Ctrl+d 字符。
例如:
%./测试
- 这是一些文字
- 这是一条新线
- 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 问题,因为我没有可以用来测试它的工具。
祝你好运
我目前正在为 class 完成一项作业,其中我们必须编写一个从命令行获取用户输入的程序。
程序应继续接受用户的输入,直到在其自己的行上写入 Ctrl+d 字符。
例如:
%./测试
- 这是一些文字
- 这是一条新线
- 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 问题,因为我没有可以用来测试它的工具。
祝你好运