【发布时间】:2013-11-07 01:01:28
【问题描述】:
我一直在努力理解 scanf 及其实际工作原理。我有以下文本文件:
this is a test !
25.0 400.0 400.0 0.0 0.0
20.0 200.0 400.0 3.0 4.0
30.0 50 600.0 1 .0 2.0
50.0 400.0 200.0 1 .0 -2.0
40.0 700.0 700.0 -1 .0 -2.0
基本上,代码应该读取每一行并将它们分配给一个单独的数组(数组 A 从第一列获取浮点数,数组 B 从第二列获取浮点数,依此类推)。我唯一能理解的是如何打开文件进行阅读:
FILE *file = fopen( argv[1], "r" );
但我不知道如何从第 1、2、3 和 4 行提取双精度值。顺便说一下,我使用条件语句跳过了第 1 行。我阅读了以下内容:
while (fgets(line, sizeof(line), file))
{
if (count < 1)
{
//printf("%s", line);
count++;
}
else
{
printf("%s", line);
}
}
这些行正在打印,但再次......不确定如何提取每个单独的数字。帮助将不胜感激。
编辑:选择解决方案
这是我在这个测试应用程序中使用的代码。如答案中所述,文本文件有一些拼写错误,使得扫描数据变得更加困难,需要在运行代码之前对其进行编辑。此外,必须添加“int i = 0”的声明才能在数组上工作。
while (fgets(line, sizeof(line), file))
{
if( 5 == sscanf(line, "%f%f%f%f%f", &A[i], &B[i], &C[i], &D[i], &E[i]) )
{
i++;
}
else
{
printf( "Parse failed\n" );
}
}
【问题讨论】:
-
输入文件中的额外空间可以对其他合理的方法造成多大的影响:)
-
@ryyker 真的很有趣。是否有 C 或其他语言的实现可以以更像人类的方式读取文本文件?我知道 ML 有一种很好的方法可以将列表切成小块,然后通过一个方法调用将它们添加到列表中,但我现在想不出其他任何方法。
-
今天早上刚看到你的问题,抱歉耽搁了。 是否有 C 或其他语言的实现...。我假设您指的是阅读某些内容并自动识别(并纠正)错字的能力。我不知道是否有这样一种语言可以将其作为本机功能。目前,您只需对可接受的输入格式设置界限(即没有额外的空格、.csv 或空格分隔等),并且您的代码必须对它将接受的输入设置界限(即检查 NULL 或空字符串, 为可接受的数字设置界限等)。