这个程序有什么问题?
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
using namespace std;
int N;
char x[110];
int main() {
scanf("%d", &N);
while (N--) {
scanf("0.%[0-9]...", &x);
printf("the digits are 0.%s\n", x);
}
return 0;
}
这是VS 2013中的控制台应用程序,这是一个示例输入和输出:
输入:
1
0.123456789...
输出
the digits are 0.123456789
但当我输入此输出时我得到:数字为0 我在Code :: Blocks和VS 2013中尝试过inputitng,手动和文本,但都没有工作。当手动输入时,程序不会等我输入N后输入数字。 我该怎么办?
答案 0 :(得分:0)
替换
scanf("0.%[0-9]...", &x);
与
scanf(" 0.%[0-9]...", x);
您需要提供数组的起始位置x
,而不是&x
。此外,开头的空格将读取所有空格字符并忽略它。因此\n
留下的scanf("%d", &N);
会被忽略。
答案 1 :(得分:0)
循环中的scanf()
失败,但您没有注意到。它失败了,因为它无法在文字0
之前处理换行符。因此,通过添加空格来修复格式字符串,并通过测试scanf()
的返回值来修复代码:
if (scanf(" 0.%[0-9]...", x) != 1)
…oops — wrong format…
格式字符串中的空白跳过零个或多个空格字符;换行符(以及制表符和空格等)是空白字符。
您也不希望&
位于x
前面。严格来说,它会导致类型违规:%[0-9]
需要char *
,但您传递char (*)[100]
,这是一种完全不同的类型。但是,它恰好是相同的地址,因此您可以使用它,但正确的代码不应该这样做。