[英]reading data from file in c
我有一个名为prob的txt文件,其中包含:
6 2 8 3
4 98652
914
143 789
1
527 146
85
1 74 8
7 6 3
每行有9个字符,并且有9行。 由于我无法在c中创建字符串数组,因此我将使用二维数组。 仔细运行代码,无穷循环是常见的,它会打印出奇怪的输出。 我也很好奇它在哪里停止接收字符串? 直到换行? 每个“保存”的预期结果:6 2 8 3或摆动包含的行。
#include <stdio.h>
FILE *prob;
main()
{
prob = fopen("prob.txt", "r");
char grid_values[9][9];
char save[9];
int i;
for (i = 0; (fscanf(prob, "%s", save) != EOF); i++)
{
int n;
for (n = 0; n <= 9; n++)
{
grid_values[i][n] = save[n];
printf("%c", grid_values[i][n]);
}
}
fclose(prob);
}
这看起来像是一个作业问题,所以我会尽力为您提供一些建议。
首先,阅读fscanf函数的描述和“%s”转换的描述。
这是我对“%s”的描述中的一个片段:
匹配一系列非空格字符; 下一个指针必须是指向足够长的字符数组的指针,以容纳输入序列和终止的空字符('\\ 0'),该字符将自动添加。 输入字符串停在空白处或最大字段宽度处,以先到者为准。
以下是两个要点:
现在,要解决此问题,可以将字符读取到二维数组中:您需要使用其他函数。 查看您的C stdio函数列表。
看到有用的声音了吗?
如果您还没有,我会给您一个提示:恐惧。 它将从输入流中读取固定数量的字节。 在您的情况下,您可以告诉它始终读取9个字节。
仅在保证每行被填充为9个字符的情况下才有效。
另一个功能是fgets。 同样,请仔细阅读功能文档。 fgets是另一个函数,它附加一个终止null。 然而! 在这种情况下,如果您告诉fgets大小为9,则fgets将仅读取8个字符,并且它将终止空值写入第9个字符。
但是还有另一种方式! 回到fscanf!
如果您查看其他转换说明符,则可以使用“%9c”读取9个字符。 如果使用此操作,它将不会在字符串中添加终止null。
使用fread和fscanf“%9c”时,如果要在其他函数(例如printf)中将这9个字节用作字符串,则需要将缓冲区设置为10个字节,并且在每个fread或fscanf函数之后,都需要写save[9] = '\\0'
。
请务必仔细阅读文档。 C字符串函数有时会以一种方式做到这一点。 但不总是。
如果使用fscanf
,它将在空格分隔符后停止。
尝试fgets
来做..它将逐行读取..
for (i = 0; (fgets(save, sizeof(save), prob) != EOF); i++)
fgets
使用的详细信息可以在这里找到:
http://www.cplusplus.com/reference/clibrary/cstdio/fgets/
--edited--
这是第二个
while(!feof(file))
{
fgets(s, sizeof(s), file); ......
}
我认为它会很好..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.