c语言文件读取老是得到错误序列

从文件data.txt读入整数n后,打印n,循环5次。代码如下。bug是只要文件中有内容,不管内容是什么,输出的都是11000、00000、10000这样类似的序列。

#include<stdio.h> 
#include<stdlib.h>
int main(void){
    FILE *fp;
    int n;
    if((fp=fopen("D:\\data.txt","r"))==NULL)
    {
        printf("Can't open the file");
        return 0;
    }
    for(int i=0;i<5;i++){
        n=fscanf(fp,"%d",&n);
        printf("%d\n",n);
    }
        fclose(fp);
    return 0;
}

修改如下,供参考:

#include<stdio.h>
#include<stdlib.h>
int main(void){
    FILE *fp;
    int n;
    if((fp=fopen("D:\\data.txt","r"))==NULL)
    {
        printf("Can't open the file");
        return 0;
    }
    for(int i=0;i<5;i++){
        fscanf(fp,"%d",&n); //n=fscanf(fp,"%d",&n); 修改
        printf("%d\n",n);
    }
    fclose(fp);
    return 0;
}

遇到 C 语言文件读取老是得到错误序列的问题,可以尝试以下解决方案:

  1. 检查文件是否打开成功:检查文件是否被成功打开,可以使用 fopen() 函数打开文件,如果函数返回失败,则意味着文件无法打开。

  2. 检查读取字符串的方法是否正确:检查读取字符串的方法是否正确,例如,检查是否使用了正确的读取字符串的函数,以及是否正确地设置读取字符串的参数。

  3. 检查输入字符串是否合法:检查输入字符串是否合法,例如,检查输入字符串的长度是否超过了文件的最大长度,以及输入字符串是否包含非法字符。

  4. 检查文件是否为空:如果文件为空,则读取字符串会失败。可以使用 fopen() 函数打开文件,并检查文件是否为空。

下面是一些示例代码,可以帮助您更好地理解解决方案:

#include <stdio.h>
#include <fstream.h>

int main() {
    // 打开文件
    std::ofstream file("file.txt");
    if (!file) {
        printf("无法打开文件\n");
        return 1;
    }

    // 检查文件是否打开成功
    if (!file) {
        printf("无法打开文件\n");
        return 1;
    }

    // 读取文件内容
    char buffer[1024];
    file >> buffer;
    printf("读取到的字符串为:%s\n", buffer);

    // 检查读取字符串的方法是否正确
    if (buffer[0] != '\n') {
        printf("读取字符串的字符不是换行符\n");
        return 1;
    }

    // 检查输入字符串是否合法
    if (buffer[0] != 'X') {
        printf("输入的字符串不合法\n");
        return 1;
    }

    // 关闭文件
    file.close();

    return 0;
}

在上面的示例代码中,我们首先使用 fstream 函数打开了一个名为 "file.txt" 的文件。然后,我们使用 >> 运算符将文件的内容读取到变量 "buffer" 中。最后,我们使用 printf() 函数检查了读取的字符串是否正确。

请注意,在读取文件中,我们需要确保输入字符串的长度不超过文件的最大长度,并且输入字符串不包含非法字符。