【发布时间】:2013-12-22 23:23:42
【问题描述】:
我正在读取文本文件 (.txt) 并获取其中的值。
这是我的代码:
// Definitions.
FILE* file;
date t1, calc[99999];
int index = 0, counter = 0, i;
char info[100];
char *newInfo[9999];
while(!feof(file)){
fscanf(file, "%s %d %d %d\n", info, &t1.day, &t1.month, &t1.year);
newInfo[index] = info;
calc[index].day = t1.day;
calc[index].month = t1.month;
calc[index].year = t1.year;
printf("read: %s %d %d %d\n", info, t1.day, t1.month, t1.year);
index++;
counter++;
}
结果是:
line_1 01 01 2011
line_2 02 02 2012
line_3 03 03 2013
到目前为止还可以,但是当我尝试在 while 循环之外打印它们时,它总是打印最后一个值,即 line_3。
for(i = 0; i < counter; i++)
printf("%s %d %d %d\n", newInfo[i], calc[i].day, calc[i].month, calc[i].year);
结果是:
line_3 01 01 2011
line_3 02 02 2012
line_3 03 03 2013
它应该像我预期的那样打印结果(我在上面展示过)。
我在newInfo[index] = info; 行赋值并增加index 变量。但它仍然只显示最新的文本。
任何帮助将不胜感激。
【问题讨论】:
-
之前已多次询问过此问题的重复问题。与以往一样,困难在于确定它是重复的问题。
-
@JonathanLeffler 智者曾感叹,
"What has been will be again, what has been done will be done again; there is nothing new under the sun." -
@JonathanLeffler,语言标签中的高比例问题涉及相同的 15 或 20 个问题,例如循环中的 eof、对只读字符串的操作、未分配的 ptrs 空间等。如果有一种机制可以将这些问题抽象到它们自己的子标签下,那将是很好的,甚至可能是一个可观的价值。这将通过不标记重复项来减少重复项的问题。它们只是子标签语料库中的示例。我们的目标不是将它们剔除,而是对它们进行适当的分类。
-
@Duck:总的来说,这是个好主意,但实现起来并不那么容易。一个问题是确定合适的标签名称。另一个是找到要贴上标签的问题;另一个是选择规范的问答。我已经开始收集一些我认为是一些问题的规范问答示例(例如
while (!feof(fp)))。但是我并没有竭尽全力创建好的标签和标签问题,这是一个问题。 (这个特定问题很少是代码的唯一问题;它通常只是众多问题中的一个额外问题。) -
@JonathanLeffler,我完全同意多个问题的问题令人烦恼。对于子标签类别,我建议创作仅限于在语言标签中获得徽章的人并由他们投票。据推测,这既赋予了标签领域一定程度的能力,又赋予了对所提出问题类别的持续熟悉。例如,我很惊讶人们能够如此容易(和准确地)认识到 XY 问题。如果子标签保持在一个可管理的范围内,我认为同样的识别会起作用。无论如何,可能是元讨论!