c - 关于 C 中 scanf() 的一些问题

标签 c scanf

我写了这个测试程序来获取 scanf() 函数的返回值。

但是在测试中,如果我输入一个整数,程序是正常的,但是当我输入一个字符串时,程序就会陷入死循环。谁能解释一下这是为什么?

还有就是转义字符\0代表ascii码0?当我打印“\12”时,我会换行,但是当我打印“\9”时,我无法得到“TAB”(TAB 的 ascii 码是 9)。

#include <stdio.h>

int main(void){
    int x;
    int temp;
    //printf("\13");
    for(;;){
        temp=scanf("%d",&x);
        printf("%i",temp);
    }

}

最佳答案

当输入与格式说明符不匹配时,scanf() 不会丢弃导致无限循环的输入。

 for(;;){
        temp=scanf("%d",&x);
      if(temp == 0) { // Input failure
          perror("invalid input");
          break;
       }
        printf("%i",temp);
    }

如果在输入无效后仍想继续循环,则说明您已读取输入并自行刷新。

关于c - 关于 C 中 scanf() 的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14636022/

相关文章:

c++ - 当模数为特殊形式时,通过模加法进行性能优化

c - 使用 fscanf() 读取文件

c - 读取文本文件并在每次遇到等号时递增变量

c - Malloc block 内容

c - 读取由命令选项和参数组成的输入,用空格分隔,在 C 中

c - 初学者对使用 fscanf 的 while 语句感到困惑

c - Sscanf 扫描包含列的行

c++ - scanf 中的赋值顺序有保证吗?

c - 为什么我的 if 语句不起作用?

c++ - 声明 float ***c 的含义