簡體   English   中英

帶結構的c ++ getline()

[英]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讀取noOfCarscars[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM