c ++数组结构问题

时间:2014-10-31 03:54:37

标签: c++ arrays

这里的任何人都知道C ++或一般的编程

我需要这个程序的帮助。我制作了一个结构,以及一个结构中的数组。当我尝试输入名称作为字符串时,无限循环可确保。有什么问题?

    #include <iostream>
    #include <string>

    const int size = 12;

    struct soccer
    {
        std::string name;
    float points, jersey;   
};


void input(soccer []);

int main()
{
    soccer info[size];
    float total;

    input(info);
}

void input(soccer info [])
{
    for (int i = 0 ; i < size ; i++)
    {
        std::cout << "Enter the name of soccer player #" << i+1 << ": ";
        std::cin >> info[i].name;
        std::cout << "Enter the jersey number for this player:";
        std::cin >> info[i].jersey;
        while (info[i].jersey < 0)
        {
            std::cout << "The jersey number cannot be a negative number. Please enter a value number for jersey: ";
            std::cin >> info[i].jersey;
        }
        std::cout << "Enter the number of points scored by this player: ";
        std::cin >> info[i].points;
        while (info[i].points < 0)
        {       
            std::cout << "Points scored cannot be a negative number. Please enter a valid number for points: ";
            std::cin >> info[i].points;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您似乎使用operator >>在数据成员名称中输入了多个单词。只输入一个单词或使用标准函数std::getline( std::cin, name )代替operator >>。在使用ignore之前,不要忘记使用成员函数std::getline,以便在输入点后从流缓冲区中删除新行字符。

例如

#include <limits>

//...

std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' ); 
std::getline( std::cin, info[i].name );

另一种方法是像以前一样使用operator >>,但添加一个运算符来输入名字和姓氏。然后你可以简单地连接这两个名字。

std::string first_name;
std::string last_name;

//...

std::cout << "Enter the first name of soccer player #" << i+1 << ": ";
std::cin >> first_name;

std::cout << "Enter the last name of soccer player #" << i+1 << ": ";
std::cin >> last_name;

info[i].name = first_name + " " + last_name;