C语言txt数据输入到二维数组中 10C

01|201|1|0
01|201|1|1000
01|21|1|100
01|12|2|300
01|1219|1|100
01|21220|2|100
这样的txt数据输入到二维数组中

2个回答

 #include <stdio.h>
int  main(int argc,char** argv)
{
        int a[6][4];
        int i,j;
        FILE* fp=fopen("文件名.txt","r"); //打开文件
        if(fp==NULL)
        {
                printf("无文件");
             return -1;
        }
        for(i=0;i<6;i++)
        {
                for(j=0;j<3;j++)
                {
                        fscanf(fp,"%d|",&a[i][j]);/*每次读取一个数,fscanf函数遇到空格或者换行结束*/
                }
                                fscanf(fp,"%d",&a[i][3]);
                fscanf(fp,"\n");
        }
                fclose(fp);
        for(i=0;i<6;i++)
        {
                for(j=0;j<4;j++)
                {
                        printf("%d ",a[i][j]);//输出
                }
                printf("\n");
        }
     return 0;  
}

MynameisLZY
MynameisLZY 并不是每一行都是3个数据啊
2 年多之前 回复

#include
#include
#include

#define DATABUF_LISTS (5)//二维数组列数
#define DATABUF_LENS (10)//二维数组行数
#define BUF_SIZE (200)

int data_buf[DATABUF_LENS][DATABUF_LENS];//二维数组

int main(int argc,char** argv)
{

char buf[BUF_SIZE] = {0};
int read_len = 0;
int list = 0;
int line = 0;
FILE* fp=fopen("./file_name.txt","r"); //打开文件
if(fp==NULL)
{
    printf("open file failed \n");
    return -1;
}

char *P = NULL;
while(fgets(buf,BUF_SIZE,fp) != NULL)//从文件中读取一行
{
    char *delim = "|";//分割符
    P = strtok(buf, delim);
    if(P == NULL)
    {
        printf("con't find ‘|’");
        return -1;
    }
    data_buf[line][list] = atoi(P);//以delim为分界拆分字符串并将其转换为整形
    list++;
    if(list == DATABUF_LISTS)
    {
        line++;
        list = 0;
    }
    while((P = strtok(NULL, delim)) != NULL)
    {
        data_buf[line][list] = atoi(P);
        list++;
        if(list == DATABUF_LISTS)
        {
            line++;
            list = 0;
        }
        if(line >= DATABUF_LENS)
        {
            printf("数据太多,数组放不下\n");
        }
    }
}
printf("**************the data is %d *************\n",line);
int i = 0;
int j = 0;
for(i = 0;i < line;i++)
{
    for(j = 0;j < DATABUF_LISTS;j++)
    {
        printf("%-8d ",data_buf[i][j]);
    }
    printf("\n");
}
/***打印最后一行数据****/
for(j = 0;j < list;j++)
{
    printf("%-8d ",data_buf[line][j]);
}
 printf("\n");
printf("***************my name is lzy*********************\n");
return 0;

}
文件示例
图片说明

运行结果
图片说明

devmiao
见了你女王大人喵姐还不跪下 回复MynameisLZY: 我就再给你一个踩。猪头
2 年多之前 回复
MynameisLZY
MynameisLZY 回复苏小喵: 我就静静的看着你
2 年多之前 回复
devmiao
见了你女王大人喵姐还不跪下 回答错误,点2个踩给你,猪头
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问