{
int n;
cin>>n;
cout<< n;
}
当0
作为输入时,输出为any alphabet or special character
。
在C中,当我使用scanf();
和printf()
时并非如此。它打印相应的ASCII值。
请解释为什么会这样?
答案 0 :(得分:1)
请解释为什么会这样?
在std::istream& operator>>(std::istream&, int)
的{{3}}中陈述(强调我的):
如果提取失败(例如,如果输入了预期数字的字母),则值保持未修改并设置failbit。
对于c ++ 11代码,似乎可以保证初始化:
如果提取失败,则将零写入值并设置failbit。如果提取结果的值太大或太小而不适合值,则会写入
std::numeric_limits<T>::max()
或std::numeric_limits<T>::min()
并设置failbit标志。
假设您运行代码的调试版本,n
可能会自动使用0
进行初始化,但技术上访问它是未定义的行为,因为它未被初始化在那种情况下,你描述。
您必须在输入后检查cin
的状态,以检测在数字提取期间是否发生故障,或者您是否可以安全地使用现在初始化的值:
int n;
std::cin >> n;
if(std::cin) {
std::cout << n << std::endl;
}
else {
std::cin.clear(); // Clear the streams fail state
std::string dummy;
std::cin >> dummy; // Consume the non numeric input
std::cout << "Wrong input, '" << dummy << "' is not a number."
}
答案 1 :(得分:0)
在C和C ++中,当输入整数时,驱动程序输入函数将读取数字字符,直到读取不是数字的字符。
例如,序列git
应返回值"123GHI"
。