我目前正在为类做一个作业,我们必须编写一个从命令行获取用户输入的程序。
程序应继续接受用户的输入,直到在其自己的行上写入 Ctrl+d 字符。
例如:
%./测试
- 这是一些文字
- 这是一条新线
- 按 +D
程序将在最后一行之后停止("-"字符只是为了向用户显示他们仍在输入文本(。
到目前为止,我有这个:
char c;
printf("- ");
while (c != EOF) {
scanf(" %c", &c);
printf("- ");
}
但是当我在执行时键入 ctrl+d 时它不会退出,任何帮助将不胜感激。
我也希望它在我的 Mac 上工作,所以如果有人可以阐明是否有不同的方法可以做到这一点(因为 cmd+d 只是拆分终端窗口(,那也将不胜感激。
提前感谢!
以下是您问题的简单解决方案:
#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问题一无所获,因为我没有一个可以测试它。
祝你好运
使用 termios
-> 顺便说一句,我保证这已经被回答了几十次,但我会再次在这里发布:https://en.wikibooks.org/wiki/Serial_Programming/termios。
请注意,在提出这些问题时,最好的办法是先将您的问题放入谷歌(必应,雅虎等(。