用fgets读取输入(进入无限循环)
我有这个应用程序,它用fgets读取用户输入。如果我在程序运行时接受用户输入,它工作正常并没有问题。但是,如果我提供文件“./myprog < in.txt”,它会进入无限循环并打印我的自定义错误消息,当用户不在整个屏幕上提供有效输入时显示。这就像按下回车键。我如何解决这个问题?用fgets读取输入(进入无限循环)
这是我的计划,是的一款具有与fgets
while(1){ mainMenu(&choice);
switch(choice)
{
case 0:
return 0;
case 1: //Add movies
getMovieData(&list);
break;
case 2:
....some initialization...
printf("Provide a name to delete : ");
fgets(inputBuffer,sizeof(inputBuffer),stdin);
trimWhiteSpace(inputBuffer);
deleteMovie(&list,inputBuffer);
break;
case 3: //List all movies
printMovieData(list);
break;
case 4: //List movies by genre
inputBuffer[0] = '\0';
printf(".....");
fgets(inputBuffer,sizeof(inputBuffer),stdin);
trimWhiteSpace(inputBuffer);
if(!isNum(inputBuffer,&genreChoice)){
showMessage("Number Expected\n");
break;
}
else if(!checkNumberValidity(&genreChoice,1,6)){
showMessage("Choose from 1 to 7\n");
break;
}
else printMoviesByGenre(list,getGenre(genreChoice-1));
break;
}
}
while(1){ printf("Provide the number of movies you would like to enter: ");
fgets(temp, sizeof(temp), stdin);
trimWhiteSpace(temp);
if(!isNum(temp,&numMovie)) printf("Enter a numeric value\n");
else if(!checkNumberValidity(&numMovie,1,MAX_MOVIES)) printf("No greater than %d\n",MAX_MOVIES);
else break;
}
回答:
我不认为无限循环来自fgets
。但它没有很好的宣称fgets(inputBuffer,sizeof(inputBuffer),stdin);
第二个参数必须是一个大小,说明你想读多少字符。向我们展示你在无限循环期间看到的printf。
回答:
检查返回值fgets
。失败时返回NULL。在流的末尾,fgets
返回NULL并且feof(file)
将为!= 0,表示您已到达流的末尾(EOF,文件结束)。
查理伯恩斯说,你必须退出在输入端,所以做这样的事情:
if (fgets(temp, sizeof(temp), stdin) == NULL) exit(EXIT_SUCCESS);
...你while(1)
循环。
相关:fgets and dealing with CTRL+D input
以上是 用fgets读取输入(进入无限循环) 的全部内容, 来源链接: utcz.com/qa/258483.html