我的程序有什么问题(scanf,C++)?
What's wrong with my program (scanf, C++)?
这个程序有什么问题?
#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.%sn", x);
}
return 0;
}
这是一个vs2013中的控制台应用程序,下面是一个示例输入和输出:
输入:
1
0.123456789...
输出the digits are 0.123456789
,但是当我输入this到this时,我得到的输出是:数字是0我曾尝试输入和手动和文本,在Code::块和VS 2013,但都没有工作。手动输入时,我输入N后,程序不会等我输入数字。我该怎么办?
循环中的scanf()
失败了,但是您没有注意到。它失败是因为它不能处理在文字0
之前的换行符。因此,通过添加一个空格来修复格式字符串,并通过测试scanf()
的返回值来修复代码:
if (scanf(" 0.%[0-9]...", x) != 1)
…oops — wrong format…
格式字符串中的空白跳过零个或多个空白字符;换行符(制表符和空格等)是空白字符。
您也不希望&
在x
前面。严格地说,它会导致类型冲突:%[0-9]
期望一个char *
,但你传递了一个完全不同类型的char (*)[100]
。然而,它恰好是相同的地址,所以你可以这样做,但正确的代码不应该这样做。
Replace
scanf("0.%[0-9]...", &x);
scanf(" 0.%[0-9]...", x);
您需要提供数组的起始位置是x
,而不是&x
。此外,开头的空格将读取所有空白字符并忽略它。因此,scanf("%d", &N);
留下的n
将被忽略。
相关文章:
- scanf() 只取数字作为输入,避免使用其他字符
- 为什么我的 scanf() 没有在我的数组上迭代我的 for 循环?
- 当我尝试使用它时,Scanf 会抛出一个随机异常(scanf_s 也是如此)
- 如何通过 scanf() 读取没有标点符号的字符串?
- 为什么这个scanf()的两个不同的输入会给出两个不同的输出?
- C++ - scanf() 和 printf() 执行顺序不对
- scanf( "%d" , array[i] + 1)是什么意思?为什么+1在那里?
- SCANF 读取错误,因为使用 %d 读取布尔值
- 为什么 printf 在 C++ 中的执行速度比 cout 快?另外scanf比cin慢,为什么?
- scanf() 的宽度说明符 - 要使用的字符长度在编译时不固定,仅在运行时确定.如何使其可变?
- 如何在循环中使用scanf,将值存储到一个变量中,然后打印出来?
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- 在C/C++中检查数字是否为整数(不带scanf/gets/etc)
- 为什么我应该在scanf()-家族成员中包含一个长度修饰符作为参数?有什么好处?使用长度修改器进行扫描的作用
- 在printf和scanf中%lli和%lld之间的区别?
- 不能使用嵌套结构中的联合元素作为 scanf() 的参数来存储所需的值
- 使用 scanf 读取文件中的图形时出现问题
- 使用 scanf() 具有不同数据类型的多个输入
- 有没有办法中止 cin 或 scanf
- 字母 'f' 在 printf()、scanf() 和 seekg() 中的 'g' 代表什么?