0

我怎样才能让这个程序的输出正常工作?我不确定为什么字符串数组不会存储我的值,然后在我的程序结束时输出它们。谢谢。

#include <iostream>
#include <string>
using namespace std;
int main ()
{
    int score[100], score1 = -1;
    string word[100];
    do
    {
        score1 = score1 + 1;
        cout << "Please enter a score (-1 to stop): ";
        cin >> score[score1];
    }
    while (score[score1] != -1);
    {
        for (int x = 0; x < score1; x++)
        {
            cout << "Enter a string: ";
            getline(cin,word[x]);
            cin.ignore();
        }
        for (int x = 0; x < score1; x++)
        {
            cout << score[x] << "::" << word[x] << endl; // need output to be 88:: hello there.
        }
    }

}
4

3 回答 3

1

我已经更正了你的代码。尝试这样的事情

#include <iostream>
#include <string>
using namespace std;
int main ()
{
    int score[100], score1 = -1;
    char word[100][100];
    do
    {
        score1++;
        cout << "Please enter a score (-1 to stop): ";
        cin >> score[score1];
    }
    while (score[score1] != -1);

    cin.ignore();

    for (int x = 0; x < score1; x++)
    {
        cout << "Enter a string: ";
        cin.getline(word[x], 100);
    }

    for (int x = 0; x < score1; x++)
    {
        cout << score[x] << "::" << word[x] << endl; // need output to be 88:: hello there.
    }

}

好吧,我做了什么?首先我删除额外的{。当我第一次看到你的代码时,我不知道 do.while 中是否有 do..while 循环或 while 循环。接下来我将字符串数组更改为 char 数组,只是因为我知道如何将行读取为 char 数组。当我需要读取行到字符串时,我总是使用我自己的函数,但如果你真的想使用字符串,这里是一个很好的例子。休息很明显。cin.ignore()是必需的,因为换行符保留在缓冲区中,所以我们需要省略它。

编辑: 我刚刚找到了修复代码的更好方法。一切正常,但您需要移动cin.ignore()并将其放置在while (score[score1] != -1); . 因为 wright 现在您忽略了每一行的第一个字符,并且您只需要在用户类型 -1 后忽略新行。固定代码。

于 2012-07-31T20:08:30.800 回答
0

在第一个循环中,在分配第一个值之前增加“score1”。这会将您的值放在从索引 1 开始的 score[] 数组中。但是,在下面的“for”循环中,您从 0 开始索引,这意味着您的分数/字符串关联将减一。

于 2012-07-31T19:54:53.487 回答
0

代替

getline(cin,word[x]);
cin.ignore();

cin >> word[x];

然后试着找出你哪里出错了。

于 2012-07-31T19:56:27.907 回答