2011-04-25 123 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

相关问题