我正在学习struct
在C + +中,我不知道如何使它不跳过第一个问题。问题与C + +和cin.getline
如果我在struct
中使用char,它只会复制第一个字,如果我尝试使用字符串,它会跳过第一个问题(忽略它)。
你能指导我吗?
后来编辑: 我使用Microsoft Visual C++ 2010 Express Edition的,并且是有std::getline
和cin.getline
之间的差异?
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
struct melodie{
char artist[50];
char titlu[50];
int an;
int lungime;
};
void main(){
int repetam;
double rezultat;
cout<<"Cate melodii ve-ti introduce: ";
cin>>repetam;
melodie *pointer = new melodie[repetam];
for(int i = 0; i<repetam; i++){
cout<<endl;
cout<<"Introduceti artistul melodiei: ";
cin.get(pointer[i].artist);
cout<<"Introduceti titlul melodiei: ";
cin.getline(pointer[i].titlu);
cout<<"Introduceti anul melodiei: ";
cin>>pointer[i].an;
cout<<"Introuceti lungea melodiei (in secunde): ";
cin>>pointer[i].lungime;
}
cout<<"Lista melodiilor introduse este:"<<endl;
for(int i =0; i<repetam; i++){
cout<<"Artistul melodiei este: "<<pointer[i].artist<<endl
<<"Titlul melodiei este: "<<pointer[i].titlu<<endl
<<"Anul melodiei este: "<<pointer[i].an<<endl
<<"Lungimea melodiei (in secunde) este: "<<pointer[i].lungime<<endl;
cout<<endl;
}
cout<<"Melodiile care au aparut dupa anul 2000 si au lungimea mai mica de 180 de secunde sunt: "<<endl;
for(int i = 0;i<repetam; i++){
if(pointer[i].an>2000 && pointer[i].lungime<180){
cout<<"Artist: "<<pointer[i].artist
<<endl
<<"Titlul: "<<pointer[i].titlu<<endl<<endl;
}
}
getch();
}
我强烈建议你使用'的std :: string',只是'CIN >> str'当你不想空间在你想要一整行的时候,或者'getline(cin,str)',记住在混合这两行时丢弃剩下的换行符。 – chris
cin.ignore()将从输入中删除任何“剩菜”。此外,你应该检查你的cin >> repetam ;,或你的新的结果可能失败[例如重复没有被设置为任何有意义的东西]。还要检查*指针是不是NULL。 –