我们不使用双精度数组吗?

问题描述 投票:1回答:1

我遇到此代码

输入:

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中?

c++ c printf scanf
1个回答
6
投票

为什么不使用双精度数组(因为输入值为双精度?)?

输入可以捕获为double以及字符。 double的有效位数限制。无论出于何种原因,您的代码都将输入存储为字符。

[0-9]之后scanf中的这三个点...起什么作用?

这三个点没有任何作用,除非它们是输入的一部分,然后在下一个scanf之前最多删除三个点。 0,123的输入将像0.123...一样被成功扫描。如果输入为0.123abc,则abc将留在输入流中,并导致当前代码出现问题。

为什么在scanf中[0-9]之后不使用任何格式说明符(在这种情况下为d)?

%[]是格式说明符。有时称为扫描集。它存储字符。它可以是包容性的或排他性的。%[0-9]包含在内。它将接受数字。它将停止在非数字的第一个字符上。设置数组限制以防止向数组写入太多字符是一种很好的做法。对于[110],请使用%109[0-9]。这允许一个字符终止于零。

© www.soinside.com 2019 - 2024. All rights reserved.