2011-04-25 97 views

回答

0

數字是以文字'100000'存儲,還是以二進制表示形式存儲?如果它是字面值'100000',只需將它讀入字符串中,該字符串已經是char數組了。

0

當您使用fscanf將輸入讀入char數組時,您可以迭代該數組並將atoi應用於每個元素,並將輸出(整數)輸入到int數組中。

1

我可能不會爲這個使用fscanf()

while ((c = fgetc(fp)) != EOF && isdigit(c)) 
    array[i++] = c - '0'; 

如果你必須使用fscanf(),則:

int i = 0; 
int v; 
while (fscanf(fp, "%1d", &v) == 1) 
{ 
    assert(v >= 0 && v <= 9); 
    array[i++] = v; 
} 

格式字符串的1限制了一個數字的整數。如果您使用%1d,則必須通過int *。如果您在庫中有C99的支持,你可以使用:

int i = 0; 
while (fscanf(fp, "%1hhd", &array[i++]) == 1) 
    ; 

hh長度修改表示指針是字符指針(很短的整數),而不是一個指針int

+0

在第一個例子中,爲什麼減去'0'? – Amit 2011-04-25 22:56:26

+0

@Amit:因爲「0」的字符代碼通常是48(但不能保證),而「9」的字符代碼通常是57,所以要從數字的字符代碼轉換爲與數字相對應的數字,則減去「0」。這適用於每個代碼集(EBCDIC,ISO/IEC 8859-x,Unicode等)。如果有其他類型的數字,例如印地文數字(Unicode U + 0660 ARABIC-INDIC DIGIT ZERO等),它只會遇到問題。 – 2011-04-26 02:02:22

+0

對不起,但我仍然感到困惑。你正在存儲一個你讀入char變量'c'的字符,對嗎?所以你讀了數字'1',把它作爲一個字符存儲到'c'中,然後把'c-0'存入整數數組中。你會減去讀取的任何'整數'的'0'。例如,如果該文件具有'14122',該怎麼辦?這種方法仍然有效嗎? – Amit 2011-04-26 04:07:06

相關問題