关于从C语言文件中读取字符串

时间:2019-06-02 17:19:14

标签: c

我必须读取一个定义了模式的文件:它将始终具有“字母(单字符)数字,数字,数字,字符串” 例如:  20 22 2340你好世界 因此,我试图将每件事物都放在列表的单独项目中。

我知道如何获取第一个字符和3个数字并将其放入新变量中,但是我不知道如何仅获取最终字符串。如果我使用fgets,它将得到所有代码行;如果使用fscanf,它将得到第一个“单词”,但空格后却什么也不会得到。我如何只读取字符串并将其存储到新变量中?

    int a, b, c, x, k = 0;
    FILE *file;
    file = fopen("Test.txt", "r");
    while (fgets(buffer, 100, file) != NULL){
     sscanf(buffer, "%c %i %i %i ", &a, &b, &c, &x);
     Events.Key = k;
     Events.Event = a;
     Events.Day = b;
     Events.Month = c;
     Events.Year = x;
     Insertion(Events, Data); //call my function to insert in the list
     k++;
}

在此代码中,我可以从(我先前的示例)A 20 22 2340中获取值,但是,如果我在sscanf中放入另一个%s和一个字符串,它将仅获得“ HELLO”,并且如果我使用fgets,它将获得整条线。如何获取整个字符串,包括空格? 谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用字符串集说明符%[],它会在您告诉它的位置停止扫描。请注意,fgets()保留尾随换行符,因此可以方便地在此停下来并过滤掉它。

char name[50];
if(sscanf(buffer, "%c %i %i %i %49[^\n]", &a, &b, &c, &x, name) != 5)
    {
    // handle error
    }
printf("%s\n", name);

注意已注释的%c的类型错误。

答案 1 :(得分:0)

知道了,伙计们,我用[^ \ n],我不知道该功能,谢谢!