【发布时间】:2014-03-05 06:27:29
【问题描述】:
我得到了我的 fscanf() 代码,它正在从文件中读取数据,但不是我所期望的。应该是:
A 1 3
B 2 5
在终端中以此类推
我的数据文件上有这些
A 4 7
B 8 6
C 4 6
D 7 3
E 10 2
F 3 8
G 1 10
在终端上阅读时,我得到了这个......
A 4 7
4 7
8 6
8 6
4 6
4 6
7 3
7 3
10 2
10 2
3 8
3 8
1 10
1 10
我希望终端上读取的数据与我的文本文件中的格式完全相同。下面的代码是我自己的
fp = fopen("data.txt", "r");
if (fp == NULL)
{
printf("File, data.txt wasn't read succesfully. \n");
fclose (fp);
}
else
{
printf("Reading data from data.txt \n");
//read in data
while (1)
{
dataTest = fscanf(fp, "%c %d %d", &c, &t1, &t2);
fscanf(fp,"%c", &nl);
if (dataTest == -1) break;
printf("%c %d %d \n", c, t1, t2);
}
printf("Data read succesfully ! \n");
fclose (fp);
}
【问题讨论】:
-
你想在这里阅读换行符
fscanf(fp,"%c", &nl);吗?也许您的文本文件中没有换行符。另外,if (dataTest == -1) break;应该紧跟在dataTest = fscanf(fp, "%c %d %d", &c, &t1, &t2);之后。 -
是的,那是在回车中读取。不会有新的线路吗?名单正在下降。我将移动 if 语句并更新结果
-
我同意,首先,如果它的 Windows 机器它甚至可能是一个回车 (\r),如果确实有一个 \n 或 \r 字符,你可以尝试使用类似的东西正确读取最后一个值这: dataTest = fscanf(fp, "%c %d %d\n", &c, &t1, &t2), dataTest = fscanf(fp, "%c %d %d\r", &c, &t1, &t2)
-
fprintf不读取数据,而是写入数据——并且您的代码中没有fprintf调用(尽管您有多个printf调用)。您能否更新您的问题以使其更加一致? -
循环中的打印语句用于调试目的。我用它来确保终端成功读取数据。