【发布时间】:2017-02-18 05:14:43
【问题描述】:
我是 C 初学者。
我需要读取一个文件并将数字保存在一个数组中。我尝试了 for 循环和 while 循环,但无法创建正确的条件。每次循环遇到文件中的空行时,我都会得到一个零数组。
我尝试使用临时变量来分配值,然后将其传递给数组。并尝试将值直接传递给数组。
我的代码:
for (i = 0; i < (num_pt + 1);)
{
fgets(line, 50, fp);
if (sscanf(line,"%d%d", &tempx, &tempy))
{
x_cr[i] = tempx;
y_cr[i] = tempy;
printf("%d %d\n", x_cr[i], y_cr[i]);
}
i++;
}
【问题讨论】:
-
可以显示输入格式吗?你可能不需要使用
fgets。 -
if (sscanf(line,"%d%d", &tempx, &tempy))需要为if (sscanf(line,"%d%d", &tempx, &tempy) == 2),因为scanf系列函数返回成功转换的参数数量。 -
我会说
for (i = 0; i < (num_pt + 1);)应该是for (i = 0; i < num_pt; i++)并删除循环中的最后一个i++- 这是使用for循环的常用方法。我只是在猜测更改结束条件,因为您没有发布足够的代码,但是如果例如num_pt是点数和元素数,在x_cr[]和y_cr[]然后索引x_cr[num_pt]将超出数组的范围。 -
此外,
i < (num_pt + 1)的风格很差,写起来很混乱,因为大脑(和编译器)必须执行额外的步骤。如果这真的是结束条件,惯用且清晰的方式是i <= num_pt,这样更容易阅读,也更容易发现错误。 -
您应该只在向数组添加条目后增加
i,而不是每行。
标签: c arrays loops parsing while-loop