当输入字符串超出预定义限制时,我遇到了fgets的一个小问题。
以下面的例子为例:
for(index = 0; index < max; index++)
{printf(" Enter the %d string : ",index+1)
if(fgets(input,MAXLEN,stdin))
{
printf(" The string and size of the string is %s and %d \n",input,strlen(input) + 1);
removeNewLine(input);
if(strcmp(input,"end") != 0)
{ //Do something with input
}
}
现在当我超过MAXLEN的长度并输入一个字符串时,我知道输入会在MAXLEN -1处追加一个'\ 0',那就是它。当我尝试输入第二个没有要求的字符串时会出现问题,即
Output :
Enter the first string : Aaaaaaaaaaaaaaaaaaaa //Exceeds limit
Enter the second string : Enter the third string : ....Waits input
所以,我认为我应该像C中那样以标准方式清除缓冲区。它等到我输入
return
两次,第一次将它附加到字符串上,下一次,期望更多输入与另一次返回。 1.有没有什么方法可以清除缓冲区而无需输入额外的回报? 2.如何实现相同的错误处理?因为fgets返回值将为非null并且strlen(输入)通过fgets为我提供了字符串的可接受大小,应该做什么?
非常感谢
答案 0 :(得分:4)
如果我理解正确,当输入的输入在范围内时,看起来你想避免两次输入。
解决方法是
for(index = 0; index < max; index++)
{
printf(" Enter the %d th string :",index);
// if (strlen(input) >=MAXLEN )
if(fgets(input,MAXLEN,stdin))
{
removeNewLine(input);
if(strcmp(input,"end") != 0)
// Do something with input
;
}
if (strlen(input) == MAXLEN-1 )
while((ch = getchar())!='\n' && ch != EOF );
}
有一个限制,当输入的字符正好是MAXLEN-2时,它会再次要求输入两次。
或者你可以通过字符输入简单地形成input
字符。
答案 1 :(得分:3)
while ((c=getchar()) != '\n' && c != EOF)
;
或:
scanf("%*[^\n]%*c");