3

ユーザーから標準入力を取得しています。ユーザーが を押した場合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;

CTRL+Dユーザーが を押した場合の最初の入力で、プログラムがそれに応じて応答するが、2回目は完全に無視する理由がわかりません。

4

1 に答える 1

9

Linux では、 がCtrl + D生成されるため、毎回EOFの戻り値を確認する必要があります。fgets()EOF検出されるとfgets()、ヌル ポインターを返します。

if (fgets(buff, 10, stdin) == NULL)
    print_error();
于 2013-10-07T15:34:37.003 に答える