C++ 将格式化输入提取器与getline混合使用会导致cout display粘在一起

C++ 将格式化输入提取器与getline混合使用会导致cout display粘在一起,c++,iostream,C++,Iostream,下面的代码用于建立电影数据库并通过它进行查询。除了第一个cout语句被聚集在一起之外,它按预期工作。代码如下 // array of structures #include <iostream> #include <string> #include <sstream> #include <stdio.h> #include <cctype> using namespace std; #define NUM_MOVIES 6 //str

下面的代码用于建立电影数据库并通过它进行查询。除了第一个cout语句被聚集在一起之外,它按预期工作。代码如下

// array of structures
#include <iostream>
#include <string>
#include <sstream>
#include <stdio.h>
#include <cctype>
using namespace std;

#define NUM_MOVIES 6
//structure
struct movies_iit{
    string title;
    int year;
} films [NUM_MOVIES];
//global variables
char title [20], y, n;
int year;
string search;
//function 1
void sort_on_title(movies_iit films[], int n)
{
//Local struct variable used to swap records
movies_iit temp;    

for(int i=0; i<n-1; i++)
    {
for(int i=0; i<n-1; i++)
        {
/*If s[i].title is later in alphabet than
s[i+1].title, swap the two records*/
        if(films[i].title>films[i+1].title)
            {
                temp = films[i];
                films[i] = films[i+1];
                films[i+1] = temp;
            }  
        }
    }
}
//end function 1
//function query1 prototype
void query1 (movies_iit movie);
//function query2 prototype
void query2 (movies_iit movie);
//function 2 prototype
void printmovie (movies_iit movie);
//beginning of main
int main ()
{
//login
//username: user
//password: word
string mystr;
int n;
char response;
string pass;
string name;
cout << "enter your username "<<endl;
cin >> name;
cout << "enter your password "<<endl;
cin >> pass;

cout << "\n" << endl;

if (name == "user" && pass == "word")
    cout << "Welcome, user." << endl;
else
{cout << "###" <<  "unrecognized username/password combination" << "\t" << "please try again"     << "###" << endl;
    system("PAUSE");
    return 0;
    }
for (n=0; n<NUM_MOVIES; n++)
{
    cout << "Enter title: ";
    getline (cin,films[n].title);
    cout << "Enter year: ";
    getline (cin,mystr);
    stringstream(mystr) >> films[n].year;
}
//sort records, function 1 call
sort_on_title(films, NUM_MOVIES);
cout << "\nYou have entered these movies:\n";
for (n=0; n<NUM_MOVIES; n++) 
    printmovie (films[n]);  //function 2 call
//Query 1
cout << "Perform an alphabetical search? (y/n)" << endl;
cin >> response;

if (response == 'y')
    {cout << "Please enter title" << endl;
    cin >> title;
    for (n=0; n<NUM_MOVIES; n++)
        {query1 (films[n]);
            response == n;
        }
    }
else if (response == 'n')
    cout << "\n" << endl;
else
    cout << "invalid entry" << endl;
//Query 2
cout << "Perform a chronological search? (y/n)" << endl;
cin >> response;
//greater than
if (response == 'y')
{   cout << "greater than what year?" << endl;
    cin >> year;
    for (n=0; n<NUM_MOVIES; n++)
        {   query2 (films[n]);
        }
}
else if (response == 'n')
    cout << "Thank you, goodbye." << endl;
else
    cout << "invalid entry" << endl;
system("pause");
return 0;
}
//end of  main
//function 2 definition
void printmovie (movies_iit movie)
{
  cout << movie.title;
  cout << " (" << movie.year << ")\n";
}
//function query1 defintion
void query1 (movies_iit movie)
{
  if (movie.title == title)
      {cout << " >> " << movie.title;
  cout << " (" << movie.year << ")\n";}
  else
      {cout << movie.title;
  cout << " (" << movie.year << ")\n";}
}
//function query2 definition
void query2 (movies_iit movie)
{
  if (movie.year >= year)
      {cout << movie.title;
        cout << " (" << movie.year << ")\n";
      }
}
//结构数组
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
#定义NUM_电影6
//结构
结构电影{
字符串标题;
国际年;
}电影[NUM_MOVIES];
//全局变量
字符标题[20],y,n;
国际年;
字符串搜索;
//职能1
标题上的无效排序(电影或IT电影[],int n)
{
//用于交换记录的本地结构变量
电影;;

对于(int i=0;i
cin>>pass
停止读取空格,但它仍在缓冲区中。当调用
getline
时,它会看到换行符在缓冲区中等待并返回。在调用
getline
之前,需要清空缓冲区

见:

看起来您在这里也有一个错误:

for (n=0; n<NUM_MOVIES; n++)
    {query1 (films[n]);
        response == n;
    }
(n=0;n)的

for (n=0; n<NUM_MOVIES; n++)
    {query1 (films[n]);
        response == n;
    }