我想编写一个代码,要求输入用户名,但时间限制为15秒。如果用户超过限制并且未能输入名称(或任何字符串),则代码将终止,并且将显示“超时”消息,否则应保存名称并显示“谢谢”消息。我曾经尝试过这种方法,但是这是错误的&无法正常工作。请给我一个解决方案。。谢谢。
#include <stdio.h>
#include <time.h>
int timeout ( int seconds )
{
clock_t endwait;
endwait = clock () + seconds * CLOCKS_PER_SEC ;
while (clock() < endwait) {}
return 1;
}
int main ()
{
char name[20];
printf("Enter Username: (in 15 seconds)\n");
printf("Time start now!!!\n");
scanf("%s",name);
if( timeout(5) == 1 ){
printf("Time Out\n");
return 0;
}
printf("Thnaks\n");
return 0;
}
该虚拟程序可能会帮助您:
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#define WAIT 3
int main ()
{
char name[20] = {0}; // in case of single character input
fd_set input_set;
struct timeval timeout;
int ready_for_reading = 0;
int read_bytes = 0;
/* Empty the FD Set */
FD_ZERO(&input_set );
/* Listen to the input descriptor */
FD_SET(0, &input_set);
/* Waiting for some seconds */
timeout.tv_sec = WAIT; // WAIT seconds
timeout.tv_usec = 0; // 0 milliseconds
/* Invitation for the user to write something */
printf("Enter Username: (in %d seconds)\n", WAIT);
printf("Time start now!!!\n");
/* Listening for input stream for any activity */
ready_for_reading = select(1, &input_set, NULL, NULL, &timeout);
/* Here, first parameter is number of FDs in the set,
* second is our FD set for reading,
* third is the FD set in which any write activity needs to updated,
* which is not required in this case.
* Fourth is timeout
*/
if (ready_for_reading == -1) {
/* Some error has occured in input */
printf("Unable to read your input\n");
return -1;
}
if (ready_for_reading) {
read_bytes = read(0, name, 19);
if(name[read_bytes-1]=='\n'){
--read_bytes;
name[read_bytes]='\0';
}
if(read_bytes==0){
printf("You just hit enter\n");
} else {
printf("Read, %d bytes from input : %s \n", read_bytes, name);
}
} else {
printf(" %d Seconds are over - no data input \n", WAIT);
}
return 0;
}
更新:
这是经过测试的代码。
另外,我从man那里得到了一些提示select
。本手册已包含一个代码段,该代码段可用于从终端读取内容,并且在无活动的情况下会在5秒内超时。
如果代码编写得不够好,请做一个简短的解释:
fd = 1
)添加到FD集。select
呼叫以侦听为任何活动创建的此FD集。timeout
期间内发生任何活动,则通过read
调用读取该活动。希望这可以帮助。
问题内容: 我正在尝试为特定功能实现超时。我检查了SE中的许多问题,找不到适合我问题的解决方案,因为: 我在Windows中运行python 超时是在我无法控制的python函数上应用的,即它是在已经设计好的模块中定义的。 python函数不是子进程 我已经为特定任务开发了一个已经设计好的定制模块(例如),并且其中定义了功能。其中一个功能(例如)由于外部因素而倾向于永久运行,而我只是不希望pyth
问题内容: 我正在尝试在angularJS中实现一个简单的计时器。但是,尽管每个人都建议超时功能不起作用。 当我注释掉“ $ timeout(countUp,500);”时 行,代码可以正常工作,但计时器不起作用。我还需要添加其他JavaScript文件吗? 提前致谢。 问题答案: 您必须将服务注入控制器
问题内容: 我正在使用Android上的Firebase Cloud Functions库,并用于调用云函数。 问题在于该函数需要10到15秒的时间才能将结果返回给客户端,因此客户端会抛出异常。 码 如何更改超时,以便客户端在引发异常之前会等待更多时间? 注意。 我没有使用OkHttp,Retrofit或默认的系统网络功能,而是在使用Firebase Cloud Functions库()来调用该函
我在Android上使用Firebase Cloud Functions library,并使用调用云函数。 问题是函数需要10-15秒将结果返回给客户端,因此客户端抛出异常。 注意。我没有使用OkHttp、REVERFIT或默认的系统网络函数,而是使用Firebase Cloud functions library()调用该函数。
问题内容: 我正在尝试使用current.futures模块使超时在python3.2中工作。但是,当它超时时,并不会真正停止执行。我尝试了使用线程和进程池执行器,但它们都没有停止任务,只有直到完成后,超时才会增加。那么,有谁知道是否有可能使它起作用? 问题答案: 据我所知,TimeoutError实际上是在您期望的时间引发的,而不是在任务完成之后引发的。 但是,您的程序本身将继续运行,直到完成所
问题内容: 我有一个脚本,该脚本遍历包含要访问的URL:s并截取其屏幕截图的文本文件。 所有这一切都完成且简单。该脚本会初始化一个类,该类在运行时会创建列表中每个站点的屏幕快照。某些站点的加载时间非常非常长,而某些站点可能根本无法加载。因此,我想将函数包装在一个超时脚本中,以使该函数在10秒内无法完成时返回。 我对最简单的解决方案感到满意,也许设置一个异步计时器,无论函数内部实际发生什么,该计时器