C++ 什么是';我们不使用双数组吗?

C++ 什么是';我们不使用双数组吗?,c++,c,printf,scanf,C++,C,Printf,Scanf,我遇到了这个密码 输入: 3 0.1227... 0.517611738... 0.7341231223444344389923899277... 我几乎不懂什么: 1.我们为什么不用双人床 数组(因为输入值是 双份的 2.这三个点的作用是什么 ... 在scanf中,[0-9]之后是 服务及 3.我们为什么不使用任何格式 后面的说明符(在本例中为d) [0-9]在scanf中 为什么不使用双数组(因为输入值是双数组) 输入可以捕获为double以及字符double确实有有效位数的限制。无论

我遇到了这个密码

输入:

3
0.1227...
0.517611738...
0.7341231223444344389923899277... 
我几乎不懂什么:

1.我们为什么不用双人床 数组(因为输入值是 双份的

2.这三个点的作用是什么 ... 在scanf中,[0-9]之后是 服务及

3.我们为什么不使用任何格式 后面的说明符(在本例中为d) [0-9]在scanf中

为什么不使用双数组(因为输入值是双数组)

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

那三个点有什么用。。。在[0-9]之后的scanf中,您在发球吗

这三个点没有任何用途,除非它们是输入的一部分,然后在下一次
scanf
之前删除最多三个点。将成功扫描
0123
的输入以及
0.123…
。如果输入为
0.123abc
abc
将留在输入流中,并导致当前代码出现问题

为什么在scanf中[0-9]之后不使用任何格式说明符(在本例中为d)

%[]
是一个格式说明符。有时称为扫描集。它存储字符。它可以是包含的,也可以是独占的。
%[0-9]
包含在内。它将接受数字。它将在非数字的第一个字符上停止。
指定符后面的
d
与点的行为相同。使用
0.%109%[0-9]d
,输入
0.123down
将扫描
0.123d
,在输入流中留下
own
,以导致当前代码中的问题。
提供数组限制以防止向数组中写入过多字符是一种很好的做法。对于[110]使用
%109[0-9]
。允许一个字符作为终止零

编辑:代码示例

#include <stdio.h>

int N;
char x[110];

int main ( void) {
    scanf("%d\n", &N);
    while (N--) {
        scanf(" 0.%109[0-9]...", x);
        printf("the digits are 0.%s\n", x);
    }
    return 0;
}
#包括
int N;
charx[110];
内部主(空){
scanf(“%d\n”,&n);
而(N--){
scanf(“0.%109[0-9]…”,x);
printf(“数字为0.%s\n”,x);
}
返回0;
}

我建议阅读
scanf
的文档。
double
的精度非常高,此代码在
“0.”
之后读取任意位数(最多110位,否则您会遇到问题)。至于
double
,程序正在读取文本。不要想得太多。我在代码块上尝试了这个精确的代码,但它没有产生所需的输出,并且出错了。你能告诉我为什么吗?30.123。。。0.1234... 数字是0.123 0.12345。。。数字为0.1234首先,一次运行不接受3个输入,仅接受2个输入。它在接受第二个字符串后立即打印第一个字符串,在接受第三个字符串后打印第二个字符串。如果你自己运行它,你会得到一个清晰的想法。user3121023是的,它工作了。但是添加一个空格和删除一个空格有什么好处?
#include <stdio.h>

int N;
char x[110];

int main ( void) {
    scanf("%d\n", &N);
    while (N--) {
        scanf(" 0.%109[0-9]...", x);
        printf("the digits are 0.%s\n", x);
    }
    return 0;
}