使用int dataype在cin功能上混淆

时间:2017-02-28 17:06:00

标签: c++

{

int n;
cin>>n;
cout<< n;

}

0作为输入时,输出为any alphabet or special character

在C中,当我使用scanf();printf()时并非如此。它打印相应的ASCII值。

请解释为什么会这样?

2 个答案:

答案 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"