c - while 循环不会在函数 c 处停止

标签 c data-structures while-loop fgets

我创建的这个函数有问题,创建它是为了最小化主函数中的代码。 (有人告诉我你应该在 main 函数中使用最少的代码)...

代码如下(后面会详细解释问题):

void startPrediction(struct TrieNode* root, struct TrieNode* pntr)
{
    char result[50];
    char search[256];
    char exitProg[5];

    while(1)
    {
        memset(&result[0], 0, sizeof(result));
        memset(&search[0], 0, sizeof(search));
        memset(&exitProg[0], 0, sizeof(exitProg));

        while(strlen(search) == 0)
        {
            printf("Enter: ");
            scanInput(search);

            search[strcspn(search, "\n")] = 0;

            if(strlen(search) == 0)
                printf("Invalid Entry, Please Retry!\n");
        }

        //check for a space in the word
        removeSpaces(search);

        removePunctuationAndSpecial(search);

        trieSearch(root, &pntr, search, result);

        printf("\n\n");

        wordSelectionDisplay(root, pntr, result);

        printf("Would you like to exit?? (Y/N)\n");
        printf("Enter: ");
        scanf("%s", exitProg);

        if( (exitProg[0] == 'Y') || (exitProg[0] == 'y') )
        {
            printf("Exiting...\n");
            return;
        }
        else
            printf("Continuing Program...\n");
    }
}

所有这些代码都很好,直到询问用户是否要退出...如果他们输入 Y/y 就可以退出,如果他们输入 N/n 则代码将从顶部开始while 循环并通过但不在 scanInput(search); 函数处停止,该函数仅包含 fgets(input, sizeof(input), stdin); 代码行...

它会通过它然后进入 if 语句并打印 “无效输入请重试” 并且只有在那之后它才会正确运行并等待用户输入一些东西......

有没有人知道如何绕过这个错误??

谢谢

最佳答案

这是因为 scanf()'\n' 留在输入缓冲区中,当您再次调用该函数时,它会简单返回,就好像用户按下了 '\n',你可能会这样做

int chr;
while (((chr = getchar()) != EOF) && (chr != '\n'));

在循环结束时。

关于c - while 循环不会在函数 c 处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34747756/

相关文章:

c - 请验证我对这个与结构相关的事情的想法是否正确

c - 功能级别是否影响主变量的内存分配区域

java - 优化二维数组中的删除节点

java - 有 2 个结果集循环的 Servlet

c++ - 有条件地链接到 qmake 中定义的共享库

c - 如果 GTK 无法创建新对象会怎样?

java - 存储和操作我的数据的最佳数据结构?

data-structures - 如何在 Julia 中检查字典中是否有键?

javascript - 如何在javascript中的每个单词后添加符号

java - 如何使这段代码不返回无限循环?