C语言 使用 fscanf() 逐行读取文件,包括空格



我需要使用 fscanf 逐行读取 c 格式的文本文件(是的,我知道,fgets(( 更适合这个,但这是一个人为的任务(。 文件中的数据格式如下(忽略引号(:

"firstname lastname"|100|500|300                                    
"otherfirstname otherlastname"|150|450|120
etc...

每个点将读作 fscanf(fp, "%s|%d|%d|%d", buf, &int1, &int2, &int3(;

上述方法有效,但是,字符串将仅读取为第一个单词(名字(,而第二个单词将被省略。我尝试使用 [^],但我最终只是无限打印文件中的第一行。

我想知道的是使用类似于上述的语句逐行循环文件的最佳方法,该方法可以读取带有空格的整个字符串而不会破坏其他所有内容。

你来了。为简单起见,使用sscanf而不是fscanf

#include <stdio.h>
int main(void) 
{
const char *buf = "firstname lastname|100|500|300 n"
"otherfirstname otherlastname |150|450|120  n";
char name[100];
int x, y, z;
int offset = 0;
while ( sscanf( buf, "%[^|] | %d | %d | %d%n", name, &x, &y, &z, &offset ) == 4 )
{
buf += offset;
sscanf( buf, "%*[^n]%n", &offset );
buf += offset;
sscanf( buf, "%*c%n", &offset );
buf += offset;
printf( "%s, %d, %d, %dn", name, x, y, z );
}       
return 0;
}

程序输出为

firstname lastname, 100, 500, 300
otherfirstname otherlastname , 150, 450, 120

最新更新