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