首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问:交替读取数值和字符串的有关问题

2012-03-09 
请教:交替读取数值和字符串的问题//6.设计一个名为car的结构,用它存储下述有关汽车的信息://生产商(存储在

请教:交替读取数值和字符串的问题
//6.设计一个名为car的结构,用它存储下述有关汽车的信息:
//生产商(存储在字符数组或string对象中的字符串),
//生产年份(整数).编写一个程序,向用户询问有多少辆汽车.
//随后,程序new来创建一个由相应数量的car结构组成
//的动态数组.接下来,程序提示用户输入每辆车的生产商(可能由多个单词组成)和年份信息.
//请注意,这需要特别小心,因为它将交替读取数值和字符串.最后程序将显示每个结构的内容.

#include   <iostream>
#include   <string>

using   namespace   std;

struct   car
{
string   make;
int   year;
};

int   main()
{
int   n=0;
cout < < "您有多少辆车要收录? " < <endl;
cin> > n;
car   *new_car=   new   car[n];
for(int   i=0;i <n;i++)
{
cout < < "Car   # " < <i+1 < < ": " < <endl;
cout < < "请输入生产商: ";

cin> > new_car[i].make;   //仅实现读取一个不带空格的字符怎么读取一行呢
                                    //getline(cin,new_car[i].make);   改为这个却得不到预想的结果!
                                  //为什么呢?我该如何使用这个成员函数呢
cout < < "请输入生产年份: ";
cin> > new_car[i].year;
}
cout < < "下面是您的收藏: " < <endl;
for(int   j=0;j <n;j++)
{
cout < <new_car[j].year < < "     " < <new_car[j].make < <endl;
}
cin.get();
return   0;
}

您有多少辆车要收录?
2
Car   #1:
请输入生产商:ford
请输入生产年份:1985
Car   #2:
请输入生产商:Rolls-Royce
请输入生产年份:1834
下面是您的收藏:
1985     ford
1834     Rolls-Royce
Press   any   key   to   continue

但题目要求是读取一行,而且是交替读取数值和字符串
于是我把语句     cin> > new_car[i].make;   改为   getline(cin,new_car[i].make);后
却得到这样的运行结果:

您有多少辆车要收录?
2
Car   #1:
请输入生产商:ford   new
请输入生产年份:Car   #2:
请输入生产商:请输入生产年份:下面是您的收藏:
-842150451
-842150451
Press   any   key   to   continue

就连没有空格的字符串读取都不行了:

您有多少辆车要收录?
2
Car   #1:
请输入生产商:ford                                    
请输入生产年份:Car   #2:
请输入生产商:请输入生产年份:下面是您的收藏:
-842150451
-842150451
Press   any   key   to   continue

谁知道这是为什么啊,难道是我用getline()用错了?




[解决办法]
cin.getline()中的参数 '\n ' 是输入的结束标志 你到msdn上看看这个函数
想用string就这样变换一下
struct car
{
string make;
int year;
};

getline(cin, new_car[i].make, '\n ');

热点排行