为什么下面的代码没有抛出错误?

问题描述 投票:1回答:2

当我输入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;
}
c++
2个回答
4
投票

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

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

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


2
投票

第一次通过时,cin并不“知道”你还没有在digits中存储一个值(尽管缺乏初始化,你可能也有)。

它也不知道这是第二次或第三次或第四次,第五次或第六次。

它只是替换了它从流中读取的内容。

这是正常的预期行为,而不是错误原因。

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

© www.soinside.com 2019 - 2024. All rights reserved.