首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >第二个输入char*产生无限循环

第二个输入char*产生无限循环
EN

Stack Overflow用户
提问于 2013-04-10 20:41:58
回答 2查看 179关注 0票数 0

下面是我的C代码。第一个输入效果很好,但第二个输入会导致无限循环。我已经刷新了缓冲区,但我不知道如何解决这个问题。

代码语言:javascript
运行
复制
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>

#define MAXARG 7

int main()
{
    char buf[256];
    char* arg[MAXARG];
    char* s;
    char* save;
    int argv;

    static const char delim[] = " \t\n";
    int pid, status;

    while(1){
        printf("MyShell: ");
        fgets(buf, sizeof(buf), stdin);
        fflush(stdin);
        argv = 0;

        s = strtok_r(buf, delim, &save);

        while(s){
            arg[argv++] = s;
            s= strtok_r(NULL, delim, &save);
        }

        arg[argv] = (char*) 0;

        if(!strcmp(arg[0], "quit"))
            break;
        if((pid = fork()) == -1)
            perror("fork failed...");
        else if(pid != 0){
            pid = wait(&status);
        }
        else{
            execvp(arg[0], arg);
        }
    }
    return 0;
}
EN

回答 2

Stack Overflow用户

发布于 2013-04-10 20:52:32

fgets上使用fflush ..在输入消息之前,您需要刷新stdin

您可以在linux中使用stdio_ext标头中的__fpurge

票数 0
EN

Stack Overflow用户

发布于 2013-04-10 20:55:39

这个问题是,你调用fgets(),然后调用fflush()并做你的工作……然后循环遍历while并再次调用fgets() ...但是你没有测试来自fgets()EOF,我几乎可以保证你会得到它。现在,您的while循环正在无休止地循环,等待fgets()返回EOF以外的其他内容

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15926152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档