fprintf和fscanf的用法

2024-11-27 02:36:04
推荐回答(3个)
回答1:

这个问题不好办,因为第一个程序里写入文件的时候字符串和数字之间以逗号分隔,那么第二个程序fscanf输入%s的时候是不会识别逗号的,它只会把hello,100作为一个整体字符串输入到str2中。因此str2就是hello,100。然后再输入%d的时候已经没有东西了,因此b仍然为0。所以最后输出hello,1000就是hello,100和最后那个0组成的。
要解决的话只能是把第一个程序里的
fprintf(fp, "%s,%d", str,a);
改成
fprintf(fp, "%s %d", str,a);
也就是文件中以空格分隔字符串和数字。

刚才发现还有一种解决方法。。。
那就是第一个程序不改,而把第二个程序的
fscanf(fp,"%s%d",str2,&b);
改成如下三行:
fscanf(fp,"%[^,]",str2);
fgetc(fp);
fscanf(fp,"%d",&b);
第一行的%[^,]是fscanf的格式控制,意为输入字符串并且以逗号为分隔符,就是说遇到逗号就结束且不读入这个逗号。因此读到的str2就是hello
第二行读入一个字符,就是那个逗号
第三行再读入一个数,就读入了100
这样就实现了以逗号分隔字符串和数字时,依然能够正确的读文件!

回答2:

fprintf(fp, "%s,%d", str,a); 输出有 逗号
改为 fprintf(fp, "%s %d", str,a); 空白

改为 fscanf(fp,"%s %d",str2,&b);// 空白

#include C++ 的,不需要。

回答3:

#include
#include
#include