2012-08-27 25 views
0
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; 
    } 
} 

某些事情将整行作为字符串输入到字符串中的名称,甚至不采取任何措施并直接进入年份...:S? ??带结构的C++ getline()

它与cin一起工作,但我想采取一整行! 它与全局定义的字符串一起工作,但不与结构内部的这个一起工作

+0

'CIN >> noOfCars; “这是你的问题。我向你挑战,寻找解释原因的众多模式之一。我在相关的问题列表中找到了大约4个。 – chris

+0

@chris您能否给我一个提示,我没有看到这行的问题? –

+0

@ChristianRau,通过所有这些想想输入流的状态。 – chris

回答

0

插入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; 
} 
3

这已经被克里斯说过很多次了。

的问题是在你前面的输入呼叫

cin>>noOfCars; 

这读取一个数,即它读取数字,它不读取一个换行符。你可能会输入一个换行符,但这并不意味着它会被读取。事实上,换行符会保留下来,直到您下次读取,这是您的getline调用。因此,您的第一个getline呼叫将读取您读取汽车数量时遗留的换行符。

新手们得到这个错误并不令我感到意外,但它确实表明你应该在提问之前花一些时间研究你的问题。这已被问及数百次以前的答案。

+1

在另一方面,它很难搜索。 –

+0

@MooingDuck,真的,我的评论已经离开了这个问题的相关列表。 – chris

+0

那么,这也是一个公平点:D你是对的。显然它是可以找到的。 –

-1

尝试 cin.getline(Cars[i].name,streamsize); 其中streamsize是字符串的最大大小。我认为这是最简单的形式。

+0

这与问题无关。它不会编译,即使错误得到解决,它也会以与OP代码失败相同的方式失败。 – john

+0

getline()与字符串对象一起工作,而不是cin.getline()另一个答案也错误地指出了它。 –

+0

对不起,我的坏。 – Edeph

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()干净利落完成后:

​​