我遇到此代码
输入:
3
0.1227...
0.517611738...
0.7341231223444344389923899277...
int N;
char x[110];
int main() {
scanf("%d\n", &N);
while (N--) {
scanf("0.%[0-9]...\n", &x);
printf("the digits are 0.%s\n", x);
而且我听不懂几件事:
1。为什么不使用双精度数组(因为输入值为双)?
2。这三个点的用途是什么...在[0-9]之后是scanf服务?和
3。为什么我们不使用任何格式说明符(在这种情况下为d)[0-9]在scanf中?
为什么不使用双精度数组(因为输入值为双精度?)?
输入可以捕获为double
以及字符。 double
的有效位数限制。无论出于何种原因,您的代码都将输入存储为字符。
[0-9]之后scanf中的这三个点...起什么作用?
这三个点没有任何作用,除非它们是输入的一部分,然后在下一个scanf
之前最多删除三个点。 0,123
的输入将像0.123...
一样被成功扫描。如果输入为0.123abc
,则abc
将留在输入流中,并导致当前代码出现问题。
为什么在scanf中[0-9]之后不使用任何格式说明符(在这种情况下为d)?
%[]
是格式说明符。有时称为扫描集。它存储字符。它可以是包容性的或排他性的。%[0-9]
包含在内。它将接受数字。它将停止在非数字的第一个字符上。设置数组限制以防止向数组写入太多字符是一种很好的做法。对于[110],请使用%109[0-9]
。这允许一个字符终止于零。