SCANF无法正常工作
Scanf does not work as expected
我尝试比较 std::cin
和 scanf
,我希望它们具有相同的行为,但实际上不是:
#include<iostream>
using namespace std;
int main()
{
int i;
cin>>i;
return 0;
}
这将收到来自用户的输入,没问题。但是
#include<stdio.h>
int main()
{
int i;
scanf("%dn",&i);
return 0;
}
i输入整数,即使我多次按" Enter",程序也不会终止,除非我输入另一个整数号码。
请注意,Scanf的格式字符串中有一个" n"。所以我尝试添加一个语句
printf("%dn", i);
很好,它打印出我刚输入的第一个号码。这是正确但很奇怪的,为什么在扫描后,该程序要求我输入任何角色而不是n
,以退出程序?
我尝试了VC和GCC,同样的问题。什么是n
表示?
scanf("%dn",&i);
让我们阅读scanf的manpage:
whitespace字符:该功能将读取并忽略下一个非Whitespace字符之前遇到的任何空格字符(Whitespace字符包含空格,Newline和Tab字符 - 请参见ISSPACE)。格式字符串中的单个空格验证了从流中提取的任何数量的白色空格字符(包括无)。
scanf的含义将搜索一个整数,然后是选项whitespace。这就是为什么他在等你两次输入。如果使用"%dnn"
,则必须是三次。等等。
如果您只想要一个互连,请使用scanf("%d",&i);
scanf("%dn",&i);
等于 std::cin >> i >> std::ws;
。
如果您想要scanf
的相同行为,请删除n
:scanf("%d",&i);
这是由于 scanf
中的任何空格字符含义"跳过输入直到找到非惠特的事实)引起的。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- sdl软件渲染器不工作,工作在硬件加速的一个
- C++程序已停止工作-求解常微分方程