2013-08-06 57 views
0

我一直在尋找一種方法來獲得2個整數,由一個空格分隔,位於我將閱讀的文件的第一行。我認爲使用一種方法fscanf只在第一行

fscanf(file, "%d %d\n", &wide, &high);

但是,上面寫着2點的整數那名在文件中的任何地方,並會給出錯誤輸出,如果第一行是格式不正確。我使用

char line[1001];
fgets(line, 1000, file);

這似乎是最好的選擇,除了它是多麼笨拙也試過。它給我留下了一串長達幾百個空格的字符串,我必須從中提取寶貴的整數,而不要在格式化時檢查錯誤。

當然有比這更好的選擇嗎?我會接受任何解決方案,但最強大的解決方案似乎(對我來說)僅在第一行是fscanf。任何方式來做到這一點?

回答

3

可以捕獲立即在char第二個數字後的字符,並檢查被捕獲的是'\n',像這樣:

int wide, high; 
char c; 
if (fscanf(file, "%d%d%c", &wide, &high, &c) != 3 || c != '\n') { 
    printf("Incorrect file format: expected two ints followed by a newline."); 
} 

這裏是一個demo on ideone

0

這似乎是最好的選擇,除了它有多笨拙。

不,不是笨拙的(除非你用錯誤的方式使用大小參數fgets() ...)。這是非常好的地道的&。 strtol(),它的工作相當不錯:

char line[LINE_MAX]; 
fgets(line, sizeof line, file); 

char *endp; 
int width = strtol(line, &endp, 10); 
int height = strtol(endp, NULL, 10); 
相關問題