我是 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++;
}
最佳答案
请注意,您对 sscanf()
的调用可能会返回 EOF
、0
、1
或 2
,并且只有当结果为 2
时,才可以安全地使用 tempx
和 tempy
中的值。
考虑这个示例代码:
#include <stdio.h>
int main(void)
{
int x;
int y;
char *str[] = { "", "a", "1 a", "1 2" };
enum { NUM_STR = sizeof(str) / sizeof(str[0]) };
for (int i = 0; i < NUM_STR; i++)
{
int rc = sscanf(str[i], "%d %d", &x, &y);
printf("rc = %2d for [%s]\n", rc, str[i]);
}
return 0;
}
在 macOS Sierra (10.12) 上运行时,输出为:
rc = -1 for []
rc = 0 for [a]
rc = 1 for [1 a]
rc = 2 for [1 2]
所以,您的支票应该是:
if (sscanf(line,"%d%d", &tempx, &tempy) == 2)
您的另一个问题是 i++
应该位于此 if
条件的主体内;添加数据时只应增加 i
。
关于C 读取文件并将数字保存在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39947152/