2017-10-22 4 views
1

(システム:Linuxミント18.1)scanf()で[CTRL] + [D]を押すと、どのようにEOFを達成できますか?

どのように私はscanf()で[CTRL] + [D]を押してEOFを達成することができますか?
当時は[CTRL] + [C]としか動作しませんでしたが、 ですが、私たちの仕事はscanf()で明示的に[CTRL] + [D]

My機能は次のとおりです。

float getFloat1() 
{ 
    float num = 0.0; 
    char term; 
    char loop = 'y'; 

    while (loop == 'y') 
    { 
    printf("Please enter a number: "); 
    if (scanf("%f%c", &num, &term) != 2 || term != '\n') 
    { 
     printf("[ERR] Invalid input.\n"); 
     while ((getchar()) != '\n'); // Flushes the scanf() input buffer 
    } 
    else 
    { 
     printf("[OK] Valid input: %f\n", num); 
     loop = 'n'; 
    } 
    } 
    return num; 
} 

私は任意のヘルプ、リンク、参照とヒントのために感謝しています!

答えて

1

変数を使用してscanfの結果を格納します。次に、ブロック内の変数を比較して、EOFがキャプチャされたかどうかを確認します。

float getFloat1() 
{ 
    float num = 0.0; 
    char term; 
    char loop = 'y'; 
    int result = 0; 

    while (loop == 'y') 
    { 
     printf("Please enter a number: "); 
     if ((result = scanf("%f%c", &num, &term)) != 2 || term != '\n') 
     { 
      if (result == EOF) { 
       printf ("EOF\n"); 
       break; 
      } 
      printf("[ERR] Invalid input.\n"); 
      while ((getchar()) != '\n'); // Flushes the scanf() input buffer 
     } 
     else 
     { 
      printf("[OK] Valid input: %f\n", num); 
      loop = 'n'; 
     } 
    } 
    return num; 
} 
+0

への呼び出しでEOFのチェックについて少し不明瞭だったありがとう、私のためにうまく働きました! [CTRL] + [D]を押すだけで、機能を終了するだけでなく、プログラム全体を終了する方法もありますか? – PatrickSteiner

0

この文:

while ((getchar()) != '\n'); 

がEOFをチェックするための一つの場所になります。提案:

int ch; 
while((ch = getchar()) != EOF && '\n' != ch); 

質問はscanf()

関連する問題