为什么我放入数组之后 输出结果为什么和文件里面的不一样呀😭


#include<stdio.h>
int main()
{
    FILE *fp=fopen("D:\\c\\data.txt.txt","r"); //打开一个已有文件,允许读取
    
    int arr[10];
    //int a=0;
    
    if(fp==NULL){
        
        return 0;
    }
    
    while(!feof(fp))
    {
        
        fgets(arr,10,fp);
        
    }//feof检查文件流是否读到了文件尾 (返回非零值代表达到文件尾) 
    
    int i;
    for(i=0;i<10;i++){
        printf("%d ",arr[i]);
    }
    fclose(fp);//关闭文件 
    return 0;
}

img

img

看看我给你改的:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    FILE *fp = fopen("D:\\c\\data.txt", "r");
    
    int arr[10];
    char line[256];
    
    if (fp == NULL)
    {
        printf("打开文件失败\n");
        return 0;
    }
    
    if (fgets(line, sizeof(line), fp) != NULL)
    {
        int i = 0;
        char *token = strtok(line, ",");
        while (token != NULL && i < 10)
        {
            arr[i++] = atoi(token);
            token = strtok(NULL, ",");
        }
        
        int j;
        for (j = 0; j < i; j++)
        {
            printf("%d ", arr[j]);
        }
    }
    
    fclose(fp);
    return 0;
}

你遇到的问题是因为fgets函数用于读取文本行时,它是按字符读取的,而不是将整行数据直接存入数组的。fgets函数的第一个参数应该是指向字符数组的指针,而你将整型数组arr的指针传入了fgets函数。
如果你想一次读取整行数据并将其存储到整型数组中,可以使用fscanf函数,它可以按特定的格式读取数据。下面是使用fscanf读取整行数据的代码:

#include <stdio.h>

int main()
{
    FILE *fp = fopen("D:\\c\\data.txt", "r");
    
    if (fp == NULL)
    {
        printf("打开文件失败\n");
        return 0;
    }
    
    int arr[10];
    int i = 0;
    
    while (fscanf(fp, "%d,", &arr[i]) == 1)
    {
        i++;
        if (i >= 10break;
    }
    
    fclose(fp);
    
    int j;
    for (j = 0; j < i; j++)
    {
        printf("%d ", arr[j]);
    }
    
    return 0;
}

这是运行结果图:

img


如果我的回答对你有帮助,能否给我一个采纳谢谢

有可能读入代码有问题

fgets(arr,10,fp);
这是按照字符串读取
你应该用
for(i=0;i<10;i++) {
fscanf(fp, "%d", &arr[i]);
}

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7427151
  • 这篇博客也不错, 你可以看下求给定图中某两点之间某一长度的路径条数
  • 除此之外, 这篇博客: 计算机之八股文中的 21. 一个程序从开始运行到结束的完整过程,你能说出来多少? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • (1)预编译 主要处理源代码文件中的以“#”开头的预编译指令。

    (2)编译 把预编译之后生成的xxx.i或xxx.ii文件,进行一系列词法分析、语法分析、语义分析及优化后,生成相应的汇编代码文件。

    (3)汇编

    将汇编代码转变成机器可以执行的指令(机器码文件)。经汇编之后,产生目标文件(与可执行文件格式几乎一样)xxx.o(Linux下)、xxx.obj(Windows下)。

    (4)链接

    将不同的源文件产生的目标文件进行链接,从而形成一个可以执行的程序。

  • 您还可以看一下 谢仁华老师的分布式集群发包框架进阶实战一课程中的 发包配置之方法定义小节, 巩固相关知识点