gpt4 book ai didi

c - 如何使用 scanf 保持程序运行

转载 作者:行者123 更新时间:2023-11-30 20:39:53 25 4
gpt4 key购买 nike

我想找到一种方法来退出“有问题的循环”(见下文)并保持程序运行,我的意思是:在程序中必须有消息:“准备发送信息,退出停止! ”如果用户不键入 exit,程序仍必须运行,而无需等待用户单击字符然后输入。这些信息必须连续发送,直到用户输入 exit 退出程序。

我希望我能很好地解释这个问题,并且我确信有一个简单的解决方案

预先感谢您的帮助

do
{

/* menu */
printf("\r\n");
printf("1 : Start, Sending Informations.\r\n");
printf("2 : Quit.\r\n");
printf("choice : ");
scanf("%d", &nChoice);

printf("\n Trying to do a connection \n \r");

/* if connection is not established, call accept, TCP SERVER */
if (fd_client == -1)
{
printf("ready to accept...\n");
fd_client = accept(fd_listen, (struct sockaddr*)&client_addr, &addrlen);

if (fd_client >= 0)
{
printf("accept: %s, port %d\r\n", inet_ntoa(client_addr.sin_addr), htons(client_addr.sin_port));
}
}

if (fd_client < 0)
{
printf(" connection is not established, continue to accept\n");

/*connection is not established, continue to accept*/
continue;
}

FD_ZERO(&rfd);
FD_ZERO(&wfd);
FD_ZERO(&efd);
FD_SET(fd_tty, &rfd);
FD_SET(fd_client, &rfd);
maxfd = (fd_tty > fd_client ? fd_tty : fd_client) + 1;

/*connection is established, call select to see if any data arrived from the GPS*/
printf("connection is established, seeing if any data arrived\n");

char chaine1[256];
char chaine2[] = "exit";
int i;

if (nChoice == 1)
{
do // THE LOOP IN QUESTION
{
printf("preparing to send informations, exit to stop !\n");
i = strcmp(chaine1, chaine2); // Building the condition to exit
scanf("%s", chaine1);
fflush(stdin);
// printf ("i= %d\n",i);

ret = select(maxfd, &rfd, &wfd, &efd, &tm);

if (ret < 0) // Select failed
{
printf("select fail\r\n");
break;
}
else if (ret == 0)
{
continue; /*no data arrived, continue to call select*/
}
else
printf("data is arriving \n");

if (FD_ISSET(fd_tty, &rfd)) /*tty port has data to be read*/
{
ret = read(fd_tty, buf, sizeof(buf));

if (ret <= 0)
{
printf("read tty port fail\r\n");
break;
}

if (send(fd_client, buf, ret, 0) < 0) /*send data to ethernet*/
{
printf("send to ethernet fail\r\n");
break;
}
}

if (FD_ISSET(fd_client, &rfd)) /*tcp client has data to be read*/
{
ret = recv(fd_client, buf, sizeof(buf), 0);

if (ret < 0)
{
printf("read from ethernet fail\r\n");
break;
}
else if (ret == 0)
{
printf("disconnect by remote\r\n");
close(fd_client);
fd_client = -1;
continue; /*continue to accept...*/
}

if (write(fd_tty, buf, ret) < 0) /*send data to tty port*/
{
printf("write to tty fail\r\n");
break;
}
}

} while (i != 0 ); // The exit condition
}
} while(nChoice != 2);

最佳答案

您可以做的简单事情就是等待超时。但使用 scanf 则无法执行此操作,因此您可以在 stdin 处对事件进行 select() 调用,如果没有事件则继续在那段时间内。

请检查以下链接 http://cboard.cprogramming.com/c-programming/96544-unblock-scanf-call.html

希望这有帮助。

关于c - 如何使用 scanf 保持程序运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25501410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com