例如,我有一个包含以下数据的文件:
22 John Sm1th 3.14
我想将22
存储到int
,将John Sm1th
存储到字符串,将3.14
存储到float
。
int main()
{
int n;
char str[51];
float f;
FILE *fp;
fp=fopen("aaa.txt");
fscanf(fp, "%d", &n);
fflush(stdin);
fgets(str, ***, fp);
fflush(stdin);
fscanf(fp, "%d", &f);
fclose(fp);
system("PAUSE");
return 0;
}
在f gets()
电话中,我怎么知道要放入***的号码?由于字符串尚未被读取,我无法真正使用strlen()
或sizeof()
来获取大小。
答案 0 :(得分:0)
fgets(str, sizeof(str), fp);
fgets
读取的最多只能读取第二个参数指定的字符数,因此您需要提供缓冲区的大小,而不是最终读取的字符串大小。
例如,您读取一行大小为20的行,然后fgets
读取20个字符并遇到新行,它会停止并将该行存储在缓冲区中。如果您读取大小为60的行,则fgets
读取最多50(sizeof(str) - 1
),并将数据存储在缓冲区中。
BTW,fflush(stdin);
是标准C中未定义的行为,但某些实现可能会支持它。
答案 1 :(得分:0)
由于您想要阅读的字符串中有一个数字,因此您无法真正使用scanf
的设置格式,并且您不能使用fgets
#39;事先知道内部弦的长度。
最好的选择可能是阅读整行,然后在空格上进行标记(例如strtok
)。获取第一个和最后一个标记,并转换为数字,同时获得所有中间标记并将它们连接成一个字符串。