为什么以下代码不会引发错误?

时间:2019-04-01 11:52:57

标签: c++

当我输入123456时,以下代码生成1 2 3 4 5 6 但是由于数字只能包含一个数字,因此该代码是否应该引发错误?

#include <iostream>

using namespace std;

int main()
{
    char digit;
    cout << "Enter a six-digit number: ";
    for (int p = 1; p <= 6; p++) {
        cin>>digit;
        cout<<digit<<" ";
    }

    return 0;
}

2 个答案:

答案 0 :(得分:4)

使用cin>>digit,您可以从char流中请求一个 cin

std::cinistream类型的basic_istream<char>类型,因此它基本上是char的缓冲区。

因此,cin>>digit将始终有效,只要输入流处于有效状态,它就会从流中删除一个char并将其保存在digit中,并且有可用数据。

答案 1 :(得分:2)

第一次,cin并没有“知道”您尚未在digits中存储值(尽管没有初始化程序,您也可能拥有)。

它也不是第二次或第三次或第四次或第五次或第六次。

它只是用从流中读取的内容替换已经存在的内容。

这是正常现象,并非错误原因。

在程序结束时,digits包含字符'6'的ASCII码(可能是)。只是那个角色。您看到了多个值的输出,因为您在循环中分别输出了每个值。