[英]c++ getline() with structs
struct car
{
string name;
int year;
};
int main() {
int noOfCars;
cout<<"enter no_ of cars : ";
cin>>noOfCars;
car* cars = new car[noOfCars];
for(int i=0;i<noOfCars;i++)
{
cout<<"Car #"<<i<<endl;
cout<<"Name : ";
getline(cin,(cars[i].name)); //here is the problem
cout<<"\n year : ";
cin>>cars[i].year;
cout<<endl;
}
}
wron采取整行作為字符串輸入到strcut中的名稱,甚至不采取任何事情直接進入ge年...:S ???
它與cin一起使用,但我想要整行! 它適用於全局定義的字符串,但不在結構中使用
克里斯說,這已被解釋過很多次了。
問題出在前面的輸入調用中
cin>>noOfCars;
這讀取一個數字,即它讀取數字,它不讀取換行符。 您可以鍵入換行符,但這並不意味着它會被讀取。 事實上,換行將保留到下次您閱讀時,這是您的getline
呼叫。 因此,當您閱讀汽車數量時,您的第一個getline
電話會讀取已經遺留的換行符。
新手們錯了,這並不讓我感到驚訝,但它確實表明你在問問題之前應該花些時間研究你的問題。 之前已經被問過並回答了數百次。
插入cin.ignore( 1000, '\\n' );
在getline
之后。
#include<string>
#include<iostream>
using namespace std;
struct car
{
string name;
int year;
};
int main() {
int noOfCars;
cout<<"enter no_ of cars : ";
cin>>noOfCars;
car* cars = new car[noOfCars];
for(int i=0;i<noOfCars;i++)
{
cin.clear();
cout<<"Car #"<<i<<endl;
cout<<"Name : ";
getline(cin,(cars[i].name)); //here is the problem
cin.ignore( 1000, '\n' );
cout<<"\n year : ";
cin>>cars[i].year;
cout<<endl;
}
return 0;
}
問題是cin>>noOfCars
在輸入隊列中留下了由Enter鍵生成的換行符。 getline(cin,(cars[i].name))
只是讀取換行符並將空字符串賦給car[i].name
數組。 因為在你的循環結束時cin>>cars[i].year
做同樣的事情, getline(cin,(cars[i].name))
總是在你輸入任何內容之前讀取換行符。
為了解決這個問題,你只需要在cin
讀取noOfCars
和cars[i].year
之后丟棄換行符,這可以通過在你的cin
之后連接cin.get()
來干凈地完成:
cout<<"enter no_ of cars : ";
(cin>>noOfCars).get(); //here is the solution
car* cars = new car[noOfCars];
for(int i=0;i<noOfCars;i++)
{
cout<<"Car #"<<i<<endl;
cout<<"Name : ";
getline(cin,(cars[i].name)); //here is the problem
cout<<"\n year : ";
(cin>>cars[i].year).get(); //here is the solution
cout<<endl;
}
試試cin.getline(Cars[i].name,streamsize);
其中streamsize是字符串的最大大小。 我認為這是最簡單的形式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.