c++ - 在主函数中使用类中的数组

标签 c++

考虑以下代码:

#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    class treasure
    {
    public:
        char name[100];
        double value[100];
        double weight[100];
    };

    int itemNumber, totalWeight, i;

    treasure item;

    std::cout << "Enter total item weight: " << std::endl;
    std::cin >> totalWeight;
    std::cout << "Enter total item number: " << std::endl;
    std::cin >> itemNumber;
    for( i = 0; i < itemNumber; i++)
    {
        std::cout << "Enter item name: " << std::endl;
        std::cin >> item.name[i];
    }

    return 0;
}

我想在数组中输入 5 项,但它只要求输入两项。它首先接受一个项目,然后在打印三行后再次接受另一个输入。好像是什么问题。哪里出了问题?

最佳答案

char name[100]; 表示您最多可以保存 100 个 char 类型的项目,而不是 100 个字符串。

这里的一个重要影响是您的输入被缓冲。 std::cin >> item.name[i]; 从输入缓冲区中取出一个 char 并将其写入 name[i]。您输入的其余部分保留在缓冲区中,并将用于下一次执行 cin,即下一次执行同一代码行。

因此,如果您输入例如'abc' 它将 'a' 保存到 item.name[0],将 'b' 保存到 item.name[1] 并将 'c' 保存到 item。名称[2]。对于 item.name[3],输入缓冲区为空,因此它等待您的下一个输入。

关于c++ - 在主函数中使用类中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42271168/

相关文章:

C++11 在不使用 try/catch block 的情况下安全地加入线程

c++ - 为什么这个正则表达式不适用于 c++ TR1?

c++ - 为什么 Clang 将显式强制转换解释为隐式强制转换?

c++ - 为什么这里不对引用初始化执行复制初始化?

c++ - 使用专用和非专用类型的模板重载

c++ - wind-chill 公式的程序表示是什么?

c++ - 了解 'most vexing parse' - 为什么允许有歧义的语法?

C++11 std::conditional 在运行时?

c++ - 当 i 不是常量表达式时寻址 std::tuple 的第 i 个成员?

c++ - QAbstractProxyModel 不更新 dataChanged() 信号