1

对于此代码,它要求第一首歌曲,并存储和打印它。但是在第一个条目之后,我被问到我是否会像我想要的那样继续,但是在我输入 Y 之后,它会跳过我的歌曲问题和 getline 函数并直接询问我是否要继续,我在这里做错了什么?

这是我的输出

输入歌曲的名称。我需要帮助
您要继续吗(是/否)?y
输入歌曲的名称。是否要继续(是/否)?y
输入歌曲的名称。是否要继续(是/否)?y
输入歌曲的名称。是否要继续(是/否)?n
输入了 4 首歌曲名称。
我需要帮助

我想要的输出和预期的输出在哪里

输入歌曲的名称。我需要帮助
您要继续吗(是/否)?y
输入歌曲的名称。打印
是否要继续 (y/n)?y
输入歌曲的名称。并输入
您要继续(y/n)吗?y
输入歌曲的名称。这些歌曲
你想继续吗(y/n)?n
输入了 4 首歌曲名称。
我需要帮助
打印
和输入
这些歌曲

/*This program will ask a user to enter a song list. By doing this each time that the     user enters
a song, he/she will then be asked if they want to enter another song, if yes then they     will enter another song.There will be a maximum of 15 songs.
This progarm will help a user keep track of their songs. But then the program will     output the amount of songs, and what they are.
input:A song. Then a yes or no, if yes, another song, if no the program will output.
output:The number of songs, and then the songs themselves, each song with it's own     individual line.
processing: There will be two functions, one of which will ask the user for the songs and     store them, and another for which will be computing
the output.
*/
    #include<iostream>
    #include<string>

using namespace std;

int input(string[15], int);
void printArray(string[15], int);

int main()
{
    const int arraysize=15;
    string songarray[arraysize];

     int x=input(songarray, arraysize);



      cout<<"There were "<<x<<" song titles entered.\n";
      printArray(songarray, x);
       return 0;
       }

/*This function will ask for the users input for a song and store the song in the     songarray. He or she
will then be asked whether or not they want to enter another song, if so, then they     will enter another song.
input:a song, y/Y or n/N for if they want to continue or not with another song
output:song will be sent to main function
processing: A while loop will be used for the user to enter is Y or N, and a for loop     (while loop nested) for the user to enter the 
songs
*/
int input(string titles[15], int rows)
{

      char answer='y';
      int k=0;
      for(int i=0;i<rows && (answer=='Y' || answer=='y');i++)
      {

           cout<<"Enter the name of a song. ";
           getline(cin, titles[i]);
           cout<<"Do you want to continue (y/n)? ";
           cin>>answer;
           k=i+1;
            }
           return k;
           }

/*The purpose of this function is to print the array from the main function.
input:accepts the array from the main function
output: prints the array
processing:nested loops will pring this array.
*/

void printArray(string playlist[15], int quantity)
{
    for(int j=0; j<quantity; j++)
    {
        cout<<playlist[j];
    }
}
4

3 回答 3

2

问题是您的“cin>>answer”读取的是单个字符,但您键入“y”然后按 Enter,因此换行符仍位于 cin 中。因此,当您的循环返回 getline 时,只需读取该换行符,您最终会得到一个空字符串。

如果你这样做:

string dummy;
getline(cin, dummy);

在“cin>>answer”之后,它会吃掉那个尾随的换行符。

于 2011-04-19T15:17:27.703 回答
2
char answer;
cin >> answer;

确实是问题所在:查看cin.ignore以获得另一种解决方案

于 2011-04-19T15:22:07.467 回答
0
char answer;
cin >> answer;

你按了哪些键来回答程序的问题?到底是哪一个answer?哪个保留在标准输入中,在您输入其他内容之前终止下一个 getline?

于 2011-04-19T15:19:06.050 回答