鱼C论坛

 找回密码
 立即注册
查看: 1336|回复: 3

[已解决]求解 C语言 文件读取问题

[复制链接]
发表于 2019-11-29 23:33:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题1:我这样编写的代码,目的是把csv格式数据读取出来,但不知道代码哪里有问题,输出的a[0][0]实际上是a[0][1],就是第一列被跳过去了,求问为什么会这样啊
问题2:如果我想把数组的类型由int改为char(数据里面有字母),这样的话代码要怎么改呢?我直接把%d和定义改成char好像不行,输出会错误 求大神指点,谢谢啦

#include <stdio.h>
#define hang 3
#define lie 5
main()
{
        int i, j;
        FILE *fid;
        int a[hang][lie];
        char str[256], str2, str3;
        fid = fopen("test.csv", "r");
        for (i = 0; i<hang; i++){
                fscanf(fid, "%256[^,]", &str); 
                for (j = 0; j<lie; j++){
                        fscanf(fid, ",%d", &a[i][j]);
                        
                }
        }
        printf("%d\n", a[1][0]);

}
最佳答案
2019-11-30 00:59:29
#include <stdio.h>
#include <string.h>

split(char s[] , int d[])
{
        int k , m               ;
        for(m = 0 , k = 0 , d[m ++] = 0 ; s[k] ; k ++) if(s[k] == ',') {
                s[k] = '\0'     ;
                d[m ++] = k + 1 ;
        }
        return m                ;
}

main()
{
        char s[1026]                                                              ;
        int d[64] , k , m                                                         ;
        FILE * fp                                                                 ;
        if(fp = (fopen("test.csv" , "r"))) {
                fgets(s , 1024 , fp)                                              ;
                while(! feof(fp)) {
                        s[strlen(s) - 1] = '\0'                                   ;
                        m = split(s , d)                                          ;
                        printf("%s" , & s[d[0]])                                  ;
                        for(k = 1 ; k < m ; k ++) printf(" , %s" , & s[d[k]])     ;
                        printf("\n")                                              ;
                        fgets(s , 1024 , fp)                                      ;
                }
                fclose(fp)                                                        ;
        } else {
                fprintf(stderr , "错误:输入文件不存在!\n")                      ;
                fprintf(stderr , "\n")                                            ;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-30 00:59:29 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
#include <string.h>

split(char s[] , int d[])
{
        int k , m               ;
        for(m = 0 , k = 0 , d[m ++] = 0 ; s[k] ; k ++) if(s[k] == ',') {
                s[k] = '\0'     ;
                d[m ++] = k + 1 ;
        }
        return m                ;
}

main()
{
        char s[1026]                                                              ;
        int d[64] , k , m                                                         ;
        FILE * fp                                                                 ;
        if(fp = (fopen("test.csv" , "r"))) {
                fgets(s , 1024 , fp)                                              ;
                while(! feof(fp)) {
                        s[strlen(s) - 1] = '\0'                                   ;
                        m = split(s , d)                                          ;
                        printf("%s" , & s[d[0]])                                  ;
                        for(k = 1 ; k < m ; k ++) printf(" , %s" , & s[d[k]])     ;
                        printf("\n")                                              ;
                        fgets(s , 1024 , fp)                                      ;
                }
                fclose(fp)                                                        ;
        } else {
                fprintf(stderr , "错误:输入文件不存在!\n")                      ;
                fprintf(stderr , "\n")                                            ;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-30 13:59:41 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-30 14:12:44 | 显示全部楼层

还是看不懂怎么改……我的代码是要把表格读取到二维数组,然后准备调用的什么的……这样好像和原本的有很大差别主要其实还是想问问为什么调用的a[0][0]会变成a[0][1]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 01:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表