C语言文件处理问题!@#

文件中的开头内容是明明是空格,为什么却输出了1

#include<stdio.h>
#include<stdlib.h>
int main()
{

    int i, n;
    FILE* fp;
    if ((fp = fopen("temp", "w+")) == NULL)
    {
        exit(0);
    }
    for (i = 1; i <= 10; i++)
        fprintf(fp, "%3d", i);
    /*for (i = 0; i < 5; i++)
    {
        fseek(fp, i * 6L, SEEK_SET);
        fscanf(fp, "%d", &n);
        printf("%3d", n);
    }*/
    fseek(fp, 0, SEEK_SET);
    fscanf(fp, "%d", &n);
    printf("%3d", n);
    printf("\n");
    fclose(fp);

    return 0;
}



img

img

把21行读取的fscanf(fp, "%d", &n);中的%d换为%c,即可
原因是%d格式读取时会忽略前面的空格
修改后代码如下

#include<stdio.h>
#include<stdlib.h>
int main()
{
 
    int i;
    char n;
    FILE* fp;
    if ((fp = fopen("temp", "w+")) == NULL)
    {
        exit(0);
    }
    for (i = 1; i <= 10; i++)
        fprintf(fp, "%3d", i);
    
    printf("\n");
    fseek(fp, 0, SEEK_SET); 
    while(fscanf(fp, "%c", &n)!=EOF){
        printf("%c", n);
    }
    
    printf("\n");
    fseek(fp, 0, SEEK_SET); 
    fscanf(fp, "%c", &n);
    if(n==' '){
         printf("n是空格 ");
    }
   
    printf("\n");
    fclose(fp);
 
    return 0;
}
 

img

希望能帮到你。

关于%d读取时空格忽略的验证实验如下,

img

#include <stdio.h>
int main()
{
    int n;
    printf("请输入一个数:");
    fscanf(stdin,"%d",&n);//忽略前面的空格直到取到第一个数字 
    printf("\n输入的数是%d",n);
    printf("\n");
    char line;
    fscanf(stdin,"%c",&line);//取出上次回车输入的\n 
    char c;
    printf("请输入一个字符:");
    fscanf(stdin,"%c",&c);//不会忽略空格,把空格当成字符读取了 
    printf("\n输入的字符是%c",c);

    printf("\n");
    return 0; 
}