从文件中扫描字符串

时间:2013-11-28 05:55:46

标签: c string file

例如,我有一个包含以下数据的文件:

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()来获取大小。

2 个答案:

答案 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)。获取第一个和最后一个标记,并转换为数字,同时获得所有中间标记并将它们连接成一个字符串。