首页 > 解决方案 > fscanf 及其扫描的数据类型

问题描述

比较这两个代码片段:

#include <stdio.h> 
int main(void) { 
    FILE *f = fopen("file","w"); 
    int i; 
    fputs("12A",f); 
    fclose(f); 
    f = fopen("file","r"); 
    fscanf(f,"%d",&i); 
    fclose(f); 
    printf("%d",i); 
    return 0; 
}

输出 12

#include <stdio.h> 
int main(void) { 
    FILE *f = fopen("file","w"); 
    char c; 
    fputs("12A",f); 
    fclose(f); 
    f = fopen("file","r"); 
    fscanf(f,"%c",&c); 
    fclose(f); 
    printf("%c",c); 
    return 0; 
}

输出 1

我理解为什么代码 #1 输出 12 因为 fscanf() 只扫描整数,但代码 #2 让我感到困惑,因为 fscanf() 扫描 char 类型的数据,那么为什么它输出 1?

我提前感谢您与像我这样的业余程序员分享您的智慧!

标签: c

解决方案


在第一种情况下,您使用fscanf(f,"%d",&i);with %dwhich 使其读取整数。

在第二种情况下,您使用fscanf(f,"%c",&i);的是 a %c,这使得它读取单个字符,即只有一个字节。

因此,在第二种情况下,它只读取'1'.


推荐阅读