while 循环不会在函数 c 处停止
while loop doesnt stop at a function c
我创建的这个函数有问题,创建它是为了最小化主函数中的代码。 (我被教导你应该在 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 语句并打印 "Invalid Entry Please retry" 并且只有在那之后它才会正确运行并等待用户输入内容。 ..
有没有人知道如何解决这个错误?
谢谢
这是因为 scanf()
将 '\n'
留在输入缓冲区中,当您再次调用该函数时,它很简单 returns 就像用户按下 '\n'
一样,您可能这样做
int chr;
while (((chr = getchar()) != EOF) && (chr != '\n'));
在循环结束时。
我创建的这个函数有问题,创建它是为了最小化主函数中的代码。 (我被教导你应该在 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 语句并打印 "Invalid Entry Please retry" 并且只有在那之后它才会正确运行并等待用户输入内容。 ..
有没有人知道如何解决这个错误?
谢谢
这是因为 scanf()
将 '\n'
留在输入缓冲区中,当您再次调用该函数时,它很简单 returns 就像用户按下 '\n'
一样,您可能这样做
int chr;
while (((chr = getchar()) != EOF) && (chr != '\n'));
在循环结束时。