我有一个char变量,它包含代表examID的数字(它是char,因为它必须是char)。我的文本文件如下所示:
5 1 Exam 1 (audit 31.10.)
6 1 Exam 2 (audit 23.10.)
14 1 Lab 01 (audit 21.11.)
16 1 Lab 02 (audit 28.11.)
...
每行中的第一个数字是examID,第二个是该考试的最大分数,行的结尾部分是考试名称。我需要在文本中搜索examID匹配,如果匹配,我需要存储最大点数和变量中的考试名称供以后使用。这就是我到目前为止所做的:
char examName[100];
char tmp[100];
int examID;
int maxPoint=0;
FILE *fin=fopen("Exams.txt", "r");
while(fgets(tmp, sizeof(char)*100, fin)!=NULL) {
sscanf(tmp, "%d", &examID);
if(examID==s.examNum)
printf("%d", examID);
}
所以我找到了匹配并打印出来,没关系,但我不知道怎么读第二个数字和考试名称。
答案 0 :(得分:3)
你快到了那里:
sscanf(tmp, "%d %d %[^\n]", &examID, &maxPoint, examName);
if(examID==s.examNum)
printf("%d %d %s\n", examID, maxPoint, examName);
fgets
读取完整的内容,然后sscanf
按格式字符串显示解析它。因此,如果您需要一个数字,然后是数字,那么字符串(如本例所示)您可以使用"%d %d %[^\n]"
注意:由于examName
有空格(并且是换行符之前文本文件的列表部分),我们使用否定的扫描集告诉sscanf
“我想要所有内容,直到找到换行符存储为一个字符串“
旁注,初始化您的可用物品:
char examName[100] = {'\0'};
char tmp[100] = {'\0'};
int examID = 0;