繁体   English   中英

读取文本文件并在C编程中存储在数组中

[英]read text file and store in array in c programming

我想读取文本文件并存储在数组中然后显示。

这是我的代码:

  int i = 0, line = 5;
  char ch[100];

  FILE *myfile;
    myfile = fopen("test.txt","r");
    if (myfile== NULL)
    {
    printf("can not open file \n");
    return 1;
    }

    while(line--){
    fscanf(myfile,"%s",&ch[i]);
    i++;
    printf("\n%s", &ch[i]);
    }

    fclose(myfile);

    return 0;
}

这是我的文字:

测试123562

856

59986

但是结果:

美东时间

2356

56

9986

怎么了? :(

ch[i]持有一个字符。 语句 fscanf(myfile,"%s",&ch[i]); 会将字符串扫描到 ch[i] ,该字符串只能容纳一个字符。 没有 '\\0'地方,它会导致程序出现 未定义的行为 更改

 
 
 
  
  fscanf(myfile,"%s",&ch[i]);
 
  

 
 
 
  
  fscanf(myfile,"%s",ch);
 
  


先前的答案是错误的。 程序的行为已明确定义,但您以错误的方式扫描文件。 如果放置i++;您的程序将按预期运行i++; printf语句之后。

 while(line--){ fscanf(myfile,"%s",&ch[i]); printf("\\n%s", &ch[i]); i++; } 

原因是&ch[i]是指向数组 i 元素的指针,字符串将从位置i开始存储在数组中。 对于给定的输入,这将起作用,因为给定的数组足够大以容纳字符串。

您可以这样做:

 while(line--){ fscanf(myfile,"%s",ch); printf("\\n%s", ch); i++; } 

但每次扫描到字符串时,它将覆盖数组ch 最好使用二维数组存储字符串并使用fgets读取文件。

您将无法在单个char ch[100]数组中容纳五行; 那只是一个100个字符的数组。

您可以使其成为数组的数组,即char ln[5][100] ,这将为您提供容纳五行的空间,每行100个字符。

然后,您当然需要在循环中索引到该数组,即:

for(int i = 0; i < 5; ++i)
{
  if(fgets(ln[i], sizeof ln[i], myfile) == NULL)
  {
    fprintf(stderr, "Read error on line %d\n", i);
    exit(1);
  }
}

这使用fgets()其是在整个行读取适合; fscanf()将停在%s空白处,这很少是您想要的。

获取字符串时,无需在scanf中使用“&”号。 使它变成这样。

fscanf(myfile,"%s",&ch[i]);

fscanf(myfile,"%s",ch);

&ch[i]将获得该数组中第i个位置的字符。 如果您想要这样,可以使用%c代替%s 并将其更改为。

printf("\n%s", ch);

当您使用与号(&)来打印字符串时,该符号将访问该变量的地址。

  1. 开发的程序必须能够使用fopen函数a读取包含矩阵A和矩阵B的输入文件。 大小不同的矩阵A和B可以存储在不同的输入文件中(如果需要)。
  2. 使用fscanf函数和for循环将矩阵A和B扫描并分配为数组
  3. 执行矩阵运算 添加矩阵A和B b。 减去矩阵A和B c。 乘以矩阵A和B
  4. 使用条件语句if或switch在3、4和5个元素矩阵之间切换。
  5. 使用fprintf函数在名为output.dat的新文件中打印所有输入矩阵和获得的结果。
  6. output.dat文件必须具有包含以下信息的头: 学生姓名b。 学生矩阵号c。 课堂部分d。 讲师姓名e。 项目名称
  7. 在标题下,输出文件必须包含矩阵A和B以及矩阵运算的结果。 使用矩阵A和B,如下所示:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM