我抓取用户的一些标准input,如果用户按下CTRL + D ,我想显示一个错误并终止程序。 我想也许我的问题可能是被困在一个while循环中;
int readInput(){ char buff[10]; int count = 0; int counter; printf("Enter random number: "); fgets(buff, 10, stdin); if ((int) strtol(buff, NULL, 10) == 0){ printf("Error reading number. \n"); return 0; //This will get hit if the user presses CTRL+D at this input. } counter = atol(buff); while (count < counter){ printf("Enter a label: "); fgets(buff, 10, stdin); if ((int) strtol(buff, NULL, 10) == 0){ printf("Error reading label"); return 0; //This will not get hit if the user presses CTRL+D at this input, but why? //I've also tried assigning a variable to 0, breaking out of the loop using break; and returning the variable at the end of the function but that also does not work. //the rest of the while loop continues even if user hit CTRL+D printf("Enter Value: " ); fgets(buff, 10, stdin); //..rest of while loop just gets other inputs like above count++; } //termination happens in main, if readInput returns a 0 we call RETURN EXIT_FAILURE;
我不明白为什么在第一次input时,如果用户按下CTRL + D ,程序会作出相应的响应,但第二次完全忽略它。
在Linux上, Ctrl + D生成EOF
,所以你需要每次检查fgets()
的返回值。 遇到EOF
时, fgets()
返回一个空指针
if (fgets(buff, 10, stdin) == NULL) print_error();