【问题标题】:How does a single variable store multiple values?单个变量如何存储多个值?
【发布时间】:2020-01-13 08:44:06
【问题描述】:

我最近开始学习使用 C++ 进行编程,遇到了一个名为“生命、宇宙和一切”的问题。我从 Google 找到了一个解决方案,并对其进行了一些修改以更好地理解它。

#include <iostream>
#include <conio.h>

using namespace std;

int main(){
    int number;
    while(1){
        cin >> number;
        if(number==42)
            break;
        cout << number << " ";
    }
    getch();
    return 0;
}

上述程序的输出是:

1 2 88 42 99
1 2 88

这里我不明白变量number 是如何存储来自输入流的多个值,并一直存储值直到我按下Return。据我所知,一个变量只能存储其对应数据类型的单个值。

【问题讨论】:

    标签: c++


    【解决方案1】:

    int num; 一次只存储一个号码。

    cin &gt;&gt; number 用输入中的下一个数字替换存储的数字。

    【讨论】:

    • 此外,在循环的每次迭代中都会打印变量的值。可能这就是造成这里混乱的原因。好像打印了一个数字向量。
    • @elementalneil 部分错误。输入流“等待”直到您按下回车键。然后它接收整行输入(它被缓冲)。然后它读取 一个 数字,将其存储在 number 中,打印此数字并重新开始循环,从缓冲区中读取下一个数字。以此类推,直到遇到 42。
    • @elementalneil 控制台输入是行缓冲。当您第一次到达cin &gt;&gt; number; 时,输入中还没有数字,所以程序会一直等待,直到您输入一些内容然后按回车。 1 2 88 42 99 作为字符串存储在输入流中。 cin &gt;&gt; number 从此字符串中一一读取数字。
    • @elementalneil 作为一个新手是可以的。 :) “每次迭代都会涉及一个输入,然后是一个输出” 这就是发生的事情。试着每行输入一个数字,你会得到你期望的行为。 cin &gt;&gt; number; 允许您输入一行,如果它有多个数字,则存储在输入流中的多余数字(作为字符串),当您再次到达 cin &gt;&gt; number; 时,它会从该字符串中读取下一个数字.只有当该字符串为空时,它才会再次暂停并等待更多输入。
    • @churill 所以,输入被缓冲了。这真的很清楚。谢谢。
    【解决方案2】:

    这不是输出:

    1 2 88 42 99
    1 2 88
    

    第一行是你的输入,第二行是输出。每次循环迭代在cin &gt;&gt; number 期间从输入流中读取一个数字,输入流的其余部分在下一轮循环之前保持未读状态。所以值存储在输入流中,而不是number。

    【讨论】:

    • 我想了很久,为什么程序会在任何时候输出42,直到我看到这个答案。谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    相关资源
    最近更新 更多