读书人

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

发布时间: 2012-03-09 16:54:57 作者: rapoo

请教:交替读取数值和字符串的问题
//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 ');

读书人网 >C++

热点推荐