wuliaaa 发表于 2019-12-15 20:55:10

求问fscanf与二维数组的问题

本帖最后由 wuliaaa 于 2019-12-15 20:56 编辑

问题:现在有一个文本,里面有像表格一样的数据像这样
weer 1234awf 2331
wwqeq q3231 24e3f
213yf 214 wqf
213g wdeqyq 213e
要把这一些数据,按照char字符串读取并存入二维数组a[][], 例如a=weer, a=1234awf这样,这样的代码要怎么写啊?(不是要print是要为后面的数据处理做准备)
我自己写的代码好像一直读取不了,没办法写入二维数组,都是换行符{:10_266:}

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

#define hang 10
#define lie 6

int main()
{
        int i, j;
        FILE *fid;
        char a = { 0 };
        char str, str2, str3;
        fid = fopen("data.txt", "a+");
        for (i = 0; i < hang; i++){
                fscanf(fid, "%256[^,]", &str);
                for (j = 0; j < lie; j++){
                        fscanf(fid, "%s ", &a);
                }
        }
}

求问这样代码要怎么设计啊{:10_266:} 或者我自己编写的错误代码要怎么修改才能达成这个目的呢?数据用txt或csv都可以,谢谢啦{:10_266:}

superbe 发表于 2019-12-15 22:36:24

本帖最后由 superbe 于 2019-12-15 22:49 编辑

测试代码如下。在你的代码上做了修改,可以实现要求的功能。我是在上面示例的4行3列的txt文件上测试的。
假定文件开始没有特殊行(比如空行),根据实际文件内容修改吧。
/* data.txt
weer 1234awf 2331
wwqeq q3231 24e3f
213yf 214 wqf
213g wdeqyq 213e
*/

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

#define hang 4//4行
#define lie 3   //3列

int main()
{
    int i, j;
    FILE *fid;
    char *a = { 0 };
    char str;
    fid = fopen("data.txt", "r");
   
    /* 读入到数组 */
    for (i = 0; i < hang; i++) {
      for (j = 0; j < lie; j++) {
            fscanf(fid, "%s", str);
            a = (char *)malloc(strlen(str)+1);
            strcpy(a, str);
      }
      fscanf(fid, "%256[^\n]", str);
    }

    /* 显示数组内容(验证) */
    for (i = 0; i < hang; i++){
      for (j = 0; j < lie; j++) {
            printf("%s ", a);
      }
      printf("\n");
    }

    /* 释放内存 */
    for (i = 0; i < hang; i++) {
      for (j = 0; j < lie; j++) {
            free(a);
      }
    }

    return 0;
}

Croper 发表于 2019-12-15 22:53:24

再仔细想一想,其实你要的是个三维数组而不是二维数组。

给个参考把#include <stdio.h>
#include <string.h>

#define N 100
#define CX 6

#define _Out_

typedef char line;
void Read(const char* path,line* _Out_ ret){
        FILE* fp=fopen(path,"r");
        int y=0,x=0;
        while (fscanf(fp,"%s",ret)!=EOF){
                if (getc(fp)=='\n'){
                        y++;
                        x=0;
                }
        }
        fclose(fp);
}

int main(){
        line a;
        memset(a,0,sizeof(a));
        Read("D:\\1.txt",a);
        for (int y=0;a!='\0';++y){
                for (int x=0;a!='\0';++x){
                        printf("%s ",a);
                }
                printf("\n");
        }
}
页: [1]
查看完整版本: 求问fscanf与二维数组的问题