【发布时间】:2014-01-17 23:38:43
【问题描述】:
我想在控制台应用程序中完成以下事情:
- 如果用户输入一个字符,应用程序将执行
相应的任务。例如,如果用户输入
1,程序 将执行任务1,如果用户输入q,程序将退出; - 如果用户什么都不输入,程序会默认每隔 10 秒执行一次任务(时间不需要很严格)。
这是我的代码:
#include <stdio.h>
#include <time.h>
char buff[64];
char command;
while(command != 'q')
{
begin:
printf(">> ");
scanf("%s", buff);
command = buff[0];
switch (command)
{
case '1':
// task 1 code will be added here;
break;
case '2':
// task 2 code will be added here;
break;
case 'q':
printf("quit the loop.\n");
break;
}
// wait for 10 seconds;
Sleep(10000);
// default task code will be added here;
if(command != 'q')
{
goto begin;
}
}
但问题是如果没有输入字符,程序将永远在scanf()函数的行处等待输入字符。所以我想知道如何在一定时间后跳过scanf()这一行,例如,如果1秒后没有输入,程序可以继续,从而完成上面列出的第二件事。
平台是 Windows,如果重要的话。
我删除了while() 后面的分号,这是一个明显的错误。
【问题讨论】:
-
我认为没有标准的方法可以实现这一点 - 即超时。您的目标是哪个平台?
-
你在什么平台上。如果您使用的是 linux,您可能会
poll或select来查看 STDIN_FILENO 上是否发生了什么 -
开始?您正在 while 条件下测试它(以
;结束,因此删除它),所以您不需要它(而是“继续”),也不需要if。 — 要进行更多“交互式”输入,您可以查看 ncurses 库;有一些关于 SO 你可能感兴趣的文献,例如here;也许你可以安排一些超时时间——但当然你的代码将取决于那个不属于标准库的库。 -
你还没有初始化
command所以第一个循环是未定义的。另外,请在 while 循环结束时删除;,否则您的程序根本不会循环