2015-06-19 119 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

相關問題