2013-01-15 163 views
2

我有一个字符变量,其中包含代表examID的数字(它是char,因为它必须是char)。我的文本文件看起来像这样:从文本文件中读取C

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

所以,我发现比赛并打印它,和它的好,但我不知道如何行和考试的名读取第二个数字。

回答

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“我想要的一切,直到一个换行符被发现存储为一个字符串”


侧面说明,初始化vairables:

char examName[100] = {'\0'}; 
char tmp[100] = {'\0'}; 
int examID = 0; 
+0

另外一张小纸条,有没有'&'提供因为标识符是al,所以在'sscanf'中考试名称准备好一个指针,它指向数组的第一个元素。 – AlienHoboken

+0

感谢您的提示,但它只是不起作用。输出如下所示:5 0然后是一些奇怪的字符。 5是正确的数字,0是错误的(在所有的例子中,我得到0而不是正确的数字)和字符串是完全离开这个世界 – yahzee

+0

@yahzee - 这很奇怪,首先检查我的旁边注意上面,并试试看,听起来像未初始化数据。如果仍然给出奇怪的结果,可以使用更全面的代码示例进行更新。鉴于你给这个文本文件的上面的代码,我看到这个工作正常。 – Mike