2015-06-19 99 views
0

我在文本文件中读取某些行以星号开头,然后其他行包含指示矩形大小的数字。我很困惑我应该如何提取这些信息。我最初尝试使用fgets()来读取字符串,然后使用sscanf来读取整数,如图所示;从文件中读取字符串和整数

while(fgets(line, MAX_CHARS, infile) != NULL) { 
     if(line[0] == '*') { 
      printf("%s\n", line); 
     } 
     sscanf(line, "%d%d", &height, &width); 
     printf("height: %d, width: %d\n", height, width); 
    } 

但它的打印是这样的;

*案例#1

高度:0,宽度:0

高度:10,宽度:20

....

*案例#2:形状

高度:10,宽度:20

高度:7,宽度:7

....

我应该逐字读取这个文件吗?

样品输入:(未更新的高度和宽度的时候了)

*Case #1 
10 20 



    X    
    X   
    XXX   




*Case #2: Shape 
    7 7 


    XX 
    XX 
    X 
+1

提供输入文件的实际示例将有所帮助。 –

+0

请参阅http://stackoverflow.com/questions/15306314/reading-both-string-and-integer-from-a-text-file,尽管您的文件格式可能不同。 – bakalolo

+1

尝试'else if(2 == sscanf(line,“%d%d”,&height,&width)) printf(“height:%d,width:%d \ n”,height,width);' – BLUEPIXY

回答

1

你忘了if后添加else部分。

while(fgets(line, MAX_CHARS, infile) != NULL) { 
    if(line[0] == '*') { 
     printf("%s\n", line); 
    } 
    // Missing piece 
    else { 
     sscanf(line, "%d%d", &height, &width); 
     printf("height: %d, width: %d\n", height, width); 
    } 
} 
+0

对!我认为是因为它是从“case”行更新的,但我不想这么做,我想从第二行获取数字,但我只是假设我使用了错误的“fgets”方法,而不是错过了简单的'else'语句 – kris