我必须读取一个定义了模式的文件:它将始终具有“字母(单字符)数字,数字,数字,字符串” 例如: 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,它将获得整条线。如何获取整个字符串,包括空格? 谢谢
答案 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],我不知道该功能,谢谢!