鱼C论坛

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

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

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

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

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

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


  1. #include <stdio.h>
  2. #define hang 3
  3. #define lie 5
  4. main()
  5. {
  6.         int i, j;
  7.         FILE *fid;
  8.         int a[hang][lie];
  9.         char str[256], str2, str3;
  10.         fid = fopen("test.csv", "r");
  11.         for (i = 0; i<hang; i++){
  12.                 fscanf(fid, "%256[^,]", &str);
  13.                 for (j = 0; j<lie; j++){
  14.                         fscanf(fid, ",%d", &a[i][j]);
  15.                        
  16.                 }
  17.         }
  18.         printf("%d\n", a[1][0]);

  19. }
复制代码
最佳答案
2019-11-30 00:59:29
  1. #include <stdio.h>
  2. #include <string.h>

  3. split(char s[] , int d[])
  4. {
  5.         int k , m               ;
  6.         for(m = 0 , k = 0 , d[m ++] = 0 ; s[k] ; k ++) if(s[k] == ',') {
  7.                 s[k] = '\0'     ;
  8.                 d[m ++] = k + 1 ;
  9.         }
  10.         return m                ;
  11. }

  12. main()
  13. {
  14.         char s[1026]                                                              ;
  15.         int d[64] , k , m                                                         ;
  16.         FILE * fp                                                                 ;
  17.         if(fp = (fopen("test.csv" , "r"))) {
  18.                 fgets(s , 1024 , fp)                                              ;
  19.                 while(! feof(fp)) {
  20.                         s[strlen(s) - 1] = '\0'                                   ;
  21.                         m = split(s , d)                                          ;
  22.                         printf("%s" , & s[d[0]])                                  ;
  23.                         for(k = 1 ; k < m ; k ++) printf(" , %s" , & s[d[k]])     ;
  24.                         printf("\n")                                              ;
  25.                         fgets(s , 1024 , fp)                                      ;
  26.                 }
  27.                 fclose(fp)                                                        ;
  28.         } else {
  29.                 fprintf(stderr , "错误:输入文件不存在!\n")                      ;
  30.                 fprintf(stderr , "\n")                                            ;
  31.         }
  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  3. split(char s[] , int d[])
  4. {
  5.         int k , m               ;
  6.         for(m = 0 , k = 0 , d[m ++] = 0 ; s[k] ; k ++) if(s[k] == ',') {
  7.                 s[k] = '\0'     ;
  8.                 d[m ++] = k + 1 ;
  9.         }
  10.         return m                ;
  11. }

  12. main()
  13. {
  14.         char s[1026]                                                              ;
  15.         int d[64] , k , m                                                         ;
  16.         FILE * fp                                                                 ;
  17.         if(fp = (fopen("test.csv" , "r"))) {
  18.                 fgets(s , 1024 , fp)                                              ;
  19.                 while(! feof(fp)) {
  20.                         s[strlen(s) - 1] = '\0'                                   ;
  21.                         m = split(s , d)                                          ;
  22.                         printf("%s" , & s[d[0]])                                  ;
  23.                         for(k = 1 ; k < m ; k ++) printf(" , %s" , & s[d[k]])     ;
  24.                         printf("\n")                                              ;
  25.                         fgets(s , 1024 , fp)                                      ;
  26.                 }
  27.                 fclose(fp)                                                        ;
  28.         } else {
  29.                 fprintf(stderr , "错误:输入文件不存在!\n")                      ;
  30.                 fprintf(stderr , "\n")                                            ;
  31.         }
  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-30 13:59:41 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-13 22:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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