2

我有一个 char 变量,其中包含代表考试 ID 的数字(它是 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.)
...

每行中的第一个数字是考试 ID,第二个是该考试的最大分数,行中剩余的文本是考试名称。我需要搜索考试ID匹配的文本,如果匹配,我需要存储最大点数,并将考试名称存储在变量中以备后用。这是我到目前为止所拥有的:

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);
}

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

4

1 回答 1

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;
于 2013-01-15T20:16:07.780 回答