【问题标题】:scanf() not working after ENTERENTER后scanf()不起作用
【发布时间】:2014-03-19 13:23:31
【问题描述】:

我正在做这个从服务器到客户端的简单示例,其中服务器充当回显服务器!因此,客户端从用户那里获取输入并将其发送到服务器,然后服务器将其发回。

我只是卡在用户的输入上。我使用了 getchar、scanf 和 fgets 之类的东西。但是当我开始输入并按 ENTER 时,它应该继续程序中的下一件事……遗憾的是,这并没有发生。

这是我的消息部分代码:

while(1)
{
    char message[1000], servermessage[1000];

    printf("You: ");
    scanf("%s", message);
    printf("%s\n", message);

    if (send(sock, message, strlen(message), 0) < 0) 
    {
        printf("sending failed\n");
        return (EXIT_FAILURE);
    }

    int received = recv(sock, servermessage, sizeof(servermessage), 0);
    if (received < 0) 
    {
        printf("received failed\n");
        return (EXIT_FAILURE);
    }

    servermessage[received] = '\0';
    printf("Server: %s\n", servermessage);
}

close(sock);

【问题讨论】:

  • scanf() 之后发生了什么?
  • 我喜欢一直打字……它永远不会停止……它就像我的标准输入一样!
  • 我认为因为你在一个while循环中,它似乎总是卡在scanf但它真的没有,你试过gdb吗
  • 所以您的问题不是从客户端发送消息到服务器”而是“scanf 不起作用 ”,不是吗?
  • 是的,有点……哎呀!我尝试调试,但我不会再进一步​​扫描 f...

标签: c scanf


【解决方案1】:

在你第一次输入后,你调用recv(),它会阻塞直到有数据要读取,你的客户端没有读取任何数据,所以什么都没有发生。您需要检查您的回声服务器以找出问题所在。如果您需要一个回显服务器来测试您的客户端,您可以使用服务器代码here

【讨论】:

  • 好吧,你可能是对的,但我不明白为什么它现在不能运行
  • 你是最棒的!您对服务器中的 recv 是正确的!我在 MSG_WAITALL 上有标志,将其改回 0,效果很好:D 今日英雄!
猜你喜欢
  • 2021-12-17
相关资源
最近更新 更多