从文本文件C中读取

时间:2013-01-15 20:02:25

标签: c

我有一个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);
}

所以我找到了匹配并打印出来,没关系,但我不知道怎么读第二个数字和考试名称。

1 个答案:

答案 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;