fscanf fscanf一个数字并将每个数字存储在数组c中
问题描述:
我有一个数字如“100000”的文件是否有将数字存储在数组中的方法?例如,我做了一个数组[100],我想要数组[0] = 1,数组[1] = 0,数组[2] = 0等。我查了它,但从我收集的,如果我使用char数组需要它作为一个整体。fscanf fscanf一个数字并将每个数字存储在数组c中
答
数字是以文字'100000'存储,还是以二进制表示形式存储?如果它是字面值'100000',只需将它读入字符串中,该字符串已经是char数组了。
答
当您使用fscanf将输入读入char数组时,您可以迭代该数组并将atoi应用于每个元素,并将输出(整数)输入到int数组中。
答
我可能不会为这个使用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'? – Amit 2011-04-25 22:56:26
@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
对不起,但我仍然感到困惑。你正在存储一个你读入char变量'c'的字符,对吗?所以你读了数字'1',把它作为一个字符存储到'c'中,然后把'c-0'存入整数数组中。你会减去读取的任何'整数'的'0'。例如,如果该文件具有'14122',该怎么办?这种方法仍然有效吗? – Amit 2011-04-26 04:07:06