用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

回到顶部