【问题标题】:C - Writing duplicate array records into a text fileC - 将重复的数组记录写入文本文件
【发布时间】:2017-12-02 16:18:52
【问题描述】:

在这个 C 程序中,我有一个包含重复学生 ID 的数组。当我尝试 将其写入文本文件,它会跳过重复的值并写入 剩余数据放入文件中,每个重复值中的值为 0。但是我 想要将该重复记录也写入文件中。

这是我的代码;

int WriteData(struct Sales StoreSales[])
{
 int i;
 FILE *fptr;

 fptr = fopen("reverseOrder.txt", "w");

 if(fptr == NULL)
 {
   printf("\nError: File cannot be opened\n");
   return -1;
 }

 fprintf(fptr, "\nStudent ID\tSales Amount\n");

 for(i = SIZE ; i > 0 ; i--)
 {
   fprintf(fptr, "%d\t\t\t%d\n", StoreSales[i].StudentID, 
   StoreSales[i].amount );
 }

 fclose(fptr);
 }

 Here's my array;

 301 -> 4
 201 -> 3
 657 -> 4
 234 -> 9
 301 -> 8
 201 -> 4

因为我是 C 的初学者,所以我找不到解决这个问题的方法。任何 有用的想法来修复我的代码?谢谢!

【问题讨论】:

  • 你能显示预期的输出吗?
  • 我想用所有重复值以相反的顺序写入给定的数组。 @coderredoc
  • 你能显示你得到的输出吗?
  • 请发布整个程序。
  • 是的。我可以编译和执行。 @hashini.W

标签: c arrays file


【解决方案1】:

您在访问数组索引时遇到了未定义的行为。

for(i = SIZE ; i > 0 ; i--)

将会

for(i = SIZE-1 ; i >= 0 ; i--)

在 C 中,数组索引从 0 开始。你有一个结构数组,其元素数量为SIZE,可以使用索引0,1,...SIZE-1 访问。 [0-索引]。当您访问索引为 SIZE 的元素时,您访问了数组之外的内存,这是不允许的 - 导致未定义的行为。

进一步说明:

您可能会访问一些不属于您的程序的内存,这会使您的程序崩溃(访问您的程序不应该访问的内存)。或者这可能会更改程序拥有的某些内存部分,从而导致错误结果。(如果只读,则会导致错误)。

【讨论】:

  • 天哪,太好了!有效!谢谢@coderredoc! :) 但如果你能进一步解释这个问题,我会很高兴的!
  • @hashini.W.:解释
  • @hashini.W.: 不用抱歉。没关系。我以为可能有什么问题。冷静点。
  • 没有问题,我的代码在您的回答的帮助下运行良好,这让我在处理数组之前三思而后行 :)
  • @hashini.W:太好了。一切顺利。
猜你喜欢
  • 1970-01-01
  • 2016-02-04
  • 2023-03-30
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多