如何在scanf()处按[CTRL] + [D]来实现EOF?

时间:2017-10-22 14:36:50

标签: c eof

(系统:Linux Mint 18.1)

如何在scanf()按[CTRL] + [D]来获得 EOF
当时只能使用[CTRL] + [C],
但是我们的任务是通过scanf()中的[CTRL] + [D]显式来实现它。

我的功能如下:

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;
}

我很感激任何帮助,链接,参考和提示!

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

这句话:

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

将是一个检查EOF的地方。建议:

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

在调用scanf()

时检查EOF有点不清楚