首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过按[CTRL]+[D]来实现EOF?

问如何通过按[CTRL]+[D]来实现EOF?
EN

Stack Overflow用户
提问于 2017-10-22 14:36:49
回答 2查看 110关注 0票数 1

(系统: Linux 18.1)

如何通过按下 at scanf()来实现CTRL+D?

当时它只适用于CTRL+C,

然而,我们的任务是通过CTRL+D在scanf()中显式地实现它。

我的职能如下:

代码语言:javascript
复制
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;
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-22 14:44:08

使用变量来存储扫描的结果。然后比较块中的变量,看看EOF是否被捕获。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2017-10-23 08:26:46

本声明如下:

代码语言:javascript
复制
while ((getchar()) != '\n'); 

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

代码语言:javascript
复制
int ch;
while( ( ch = getchar() ) != EOF && '\n' != ch );

关于在调用scanf()时检查EOF,这个问题有点不清楚

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46875309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档