C:扫描 While not EOF 循环意外结果

标签 c scanf

我知道在到达 EOF 之前,关于 scanf 的同一主题有很多问题,但这是我没有见过的特殊情况。假设我想编写一个 C 程序,其中用户输入单个字符,程序打印回该字符以及用户输入字符的次数,直到他们按 CTRL+D (EOF)

这就是我所拥有的:

#include <stdio.h>

int main(){
  char thing;
  int i=0;
  while(scanf("%c", &thing) != EOF){
    printf("time:%d, char:%c\n",i,thing);
    i++;
  }

  return 0;
}

但是,输出并不符合预期。内容如下:

f
time:0, char:f
time:1, char:

p
time:2, char:p
time:3, char:

m
time:4, char:m
time:5, char:

我不太确定为什么 i 再次递增,以及为什么 printf 再次执行。也许我错过了一些东西。

最佳答案

尝试

#include <stdio.h>

int main(){
  char thing;
  int i=0;
  while(scanf("%c", &thing) != EOF){
    if (thing!='\n') {
      printf("time:%d, char:%c\n",i,thing);
      i++;
    }
  }

  return 0;
}

关于C:扫描 While not EOF 循环意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41865200/

相关文章:

c - C中VS2013文件打开错误

c - 将 C X 宏与 #ifdef 结合使用

c - XCode C 编译器给出了关于指向 const 整数值的整数指针的不同结果,为什么?

c++ - 替代标准 std::string 数据类型和 print()

c - 如何使用scanf限制输入长度

c - 如何在 c 中使用 scanf 读取空格?

c - 程序在输出前不等待

c - 如何更新结构/记录数据库

stdin - 替换文件的标准输入

c - scanf() 不接受多个输入