如何将一行中的前两个字符串写入每个自己的变量,并将该行的其余内容写入其自己的数组?

时间:2014-09-11 07:51:48

标签: c++ arrays string

我有一个简单的程序,该程序应该包含一个输入文件,其中包含名字和姓氏,然后是各种整数。我希望能够将名称的前两个字符串写入自己的变量,并将其余的整数写入自己的数组中。我已经进行了代码设置,将字符串读入自己的变量,但是当我尝试将整数写入自己的数组时,我得到前两个字符串的无限循环。这是代码。

int main() 
{
    std::string first_name,last_name;

    int scores_tem[20];
    int i=0;

    std::ifstream filen ("input.txt");
    if (filen.is_open())
    {
        while(!filen.eof())
        {
            filen >> first_name >> last_name;
            for(i;i<20;i++)
            {
                filen>>scores_tem[i];
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

此解决方案是在不允许使用getline的条件之后制定的,并且两个名称之后的整数数始终为20.此解决方案不是非常通用,我不喜欢它,但它确实工作

#include <string>
#include <iostream>
#include <fstream>

int main()
{
    std::string first_name, last_name;

    int scores_tem[20];
    int i = 0;

    std::ifstream filen("input.txt");
    if (filen.is_open())
    {
        while (!filen.eof())
        {
            filen >> first_name >> last_name;
            for (i = 0; i < 20; i++)
            {
                filen >> scores_tem[i];
            }
            std::cout << first_name << " " << last_name;
                for (auto &k : scores_tem)
                    std::cout << " " << k;
                std::cout << std::endl;
        }
        std::cin.get();
    }
}

找到另一个解决错误输入事件的解决方案。

#include <string>
#include <iostream>
#include <fstream>

int main()
{
    std::string first_name, last_name;

    int scores_tem[20];
    int i = 0;

    std::ifstream filen("input.txt");
    if (filen.is_open())
    {
        while (true)
        {
            if (!(filen >> first_name)) break;
            if (!(filen >> last_name)) break;
            for (i = 0; i < 20; i++)
            {
                if(!(filen >> scores_tem[i])) break;
            }
            if(!(filen.get())) break;

            std::cout << first_name << " " << last_name;
            for (auto &k : scores_tem)
                std::cout << " " << k;
            std::cout << std::endl;
        }
        std::cin.get();
    }
}

答案 1 :(得分:0)

int 
main(int argc, char* argv[]) {

std::string last_name, first_name;
std::vector<int> scores;
int tmp;
std::ifstream filen ("input.txt");
while (filen >> first_name >> last_name) {



    scores.clear();  
    for (int i = 0; i < 20; i++)
        {
            filen >> tmp;
            scores.push_back(tmp);
        }                 
    std::cout<< first_name << " " << last_name << std::endl;
  }
}

所以我就这样做了。该程序接受一个参数int main(int argc, char* argv[])。然后我创建了两个字符串,一个用于名称的每个部分,另一个用于int类型的分数。我为读入的内容创建了一个临时整数位置。

然后我从input.txt中打开了文件流,然后进行了一个while循环。 while循环参数是这样的,当我首先读取第一个名称然后是第二个名称时,我清除了先前的矢量数据。然后我创建了一个for循环来运行其余的数字20次,指定下一个读入的整数放入得分矢量。

最后,当我通过while循环时,我输出每个人的名字和姓氏。希望这有助于其他人。