我有一个程序,它在启动for (;;)循环之前会运行几个步骤。
我希望能够中断;这个for循环使用击键(例如,“e”表示退出)。
我尝试过scanf_s,但我认为我没有正确地使用它们。如果我尝试在其中写入scanf_s,循环就不会启动。
我不太熟悉C编程,所以我有点挣扎。
有人能解释一下这件事吗?
额外信息:
操作系统是Win 8.1。
程序是TCP服务器程序。它创建一个套接字并开始监听。然后,它开始接受for循环中的客户端连接。然后开始另一个for循环以接收来自客户端的消息。
s**. 编辑:使用 this ,我成功地停止了使用的第二个for循环将更改添加到简化代码(只需在下面).**
添加:
if (_kbhit()) {
key = _getch();
if (key == 's');
break;
}以下是一些简化的代码:
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
// prelim info goes here
// like SOCKET
// and struct sockaddr_in
// Initialize Winsock
WSAStartup();
// Create socket
mysocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
// server parameters go here
// like sin_addr and sin_port
bind(mysocket);
// start listening
listen(mysocket, SOMAXCONN);
// begin the damn for loops
for (;;)
{
myclient = accept();
//second for loop
for (;;)
{
receivedata = recv(myclient);
printf(<data>)
if (_kbhit()) {
key = _getch();
if (key == 's');
break;
}
}
}
// close socket
closesocket(mysocket);
// call WSACleanup
WSACleanup();
return 0;
}感谢所有提供链接和有帮助的答案的人。外部循环的问题被证明比仅仅破坏它更复杂一些。但是,如果有任何未来的访问者想知道如何用键盘按下一个循环,这已经实现了。看到正确的答案或我的简化代码。
发布于 2014-09-20 11:42:50
您可以尝试使用用户定义的中断。
https://stackoverflow.com/questions/25946367
复制相似问题