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;
}