2011-03-31 257 views
2

我正在從文件加載矩陣,這裏出現了問題,如何處理加載文件時是否會出現錯誤,如果會有字母而不是數字?我特別要問 - 如何確定,我裝的是信件?fscanf C - 確定字母代替數字

THX

+0

您可以格式化你嘗試用fscanf()函數讀什麼,你可以給你如何嘗試一個例子使用它? – fnokke 2011-03-31 14:57:58

回答

3

如果fscanf()讀出的輸入不匹配所期望的類型(如由轉換說明確定),這將通過fscanf()的返回值(它等於被報告覆蓋範圍說明符數成功閱讀)。

int x; 
if (fscanf(file, "%d", &x) != 1) 
{ 
    // input was not a number 
} 

更一般地說,整個scanf()系列函數的主要目的是讀取空格分開,瑣碎的數據。通常閱讀完整的一行(使用fgets()),然後在內部進行解析更爲簡單可靠。 (strtol()strtod()能有所幫助在這裏,但strtok()應小心使用,尤其是在多線程環境。)

2

不要fscanf()

fgets()sscanf()

在錯誤的情況下,你仍然有錯誤恢復原始數據(或顯示用戶或其他)

而且經常檢查scanf系列函數的返回值。

if (fscanf(stdin, "%d", &var) != 1) { /* oops */ } 

if (fgets(buf, sizeof buf, stdin) == NULL) { /* oops */ } 
if (sscanf(buf, "%d", &var) != 1) { /* oops */ }