而循环不会在函数c处停止

而循环不会在函数c处停止,c,data-structures,while-loop,fgets,C,Data Structures,While Loop,Fgets,我对我创建的这个函数有一个问题,它是为了最小化主函数中的代码而创建的。(我被教导在主函数中应该有最少的代码) 以下是代码(我会在后面详细解释问题): 所有这些代码都很好,直到询问用户是否要退出。。。如果他们输入Y/Y,那么这很好,并且它会退出;如果他们输入N/N,那么代码将从while循环的顶部开始,并在扫描输入(搜索)处通过,但不会停止函数,只包含一个fgets(输入,sizeof(输入),stdin)代码行 它将通过它,然后进入if语句并打印“无效输入请重试”,只有在这之后,它才能正确运行,

我对我创建的这个函数有一个问题,它是为了最小化主函数中的代码而创建的。(我被教导在主函数中应该有最少的代码)

以下是代码(我会在后面详细解释问题):

所有这些代码都很好,直到询问用户是否要退出。。。如果他们输入Y/Y,那么这很好,并且它会退出;如果他们输入N/N,那么代码将从while循环的顶部开始,并在
扫描输入(搜索)处通过,但不会停止函数,只包含一个
fgets(输入,sizeof(输入),stdin)代码行

它将通过它,然后进入if语句并打印“无效输入请重试”,只有在这之后,它才能正确运行,并等待用户输入内容

有人知道如何绕过这个漏洞吗

谢谢

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

int chr;
while (((chr = getchar()) != EOF) && (chr != '\n'));
在循环结束时。

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

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

在循环结束时。

不要使用
scanf()
@iharob我没有使用
fgets()
我只是调用了scanInputOh中的函数,
while(strlen(search)==0)
很简单
while(*search='\0')
,但没有不必要的函数调用开销。同样地,
if(*search==0).
@iharob好的,谢谢,你的答案很有效,我会在我可以的时候给你打分:)你可以使用
scanf(“%s\n”)
不要使用
scanf()
@iharob我没有使用
fgets()
我只是调用了它在scaniputoh中的函数,
而(strlen(search)==0)
很简单
而(*search=='\0')
,但是没有不必要的函数调用的开销。再次
if(*search==0).
@iharob好的,谢谢,你的答案很有效,我会在我可以的时候标记它:)你可以使用
scanf(%s\n”)