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