c++关于cin.getline的用法的疑问

我想用一个数组,数组中的每个元素都是一个car结构。现在的问题是,用cin.getline函数后编译器没报错,但是一运行程序,输入不止一个单词就会开始乱码,求帮我看一下代码错在哪?
#include <iostream>
#include <cstdlib>
struct car
{
char make [20]; //make表示车的制造商
int year;
};
int main()
{
using namespace std;
int n;
cout << "How many cars do you wish to have? ";
cin >> n;
car * ar = new car [n];
for (int i = 0; i < n; ++i)
{
cout << "Car #" << i+1 << ":\n";
cout << "Please enter the make: ";
cin.getline(ar->make, 20); //车的制造商不一定只有一个单词
cout << "Please enter the year made: ";
cin >> (ar+1)->year;
}
cout << "Here is your collection:\n";
for (int j = 0; j < n; ++j)
cout << ar->year << " " << (ar+1)->make << endl;
delete [] ar;
system("pause");
return 0;
}

#include <iostream>
#include <cstdlib>
struct car
{
char make [20];    //make表示车的制造商
int year;
};
int main()
{
using namespace std;
int n;
cout << "How many cars do you wish to have? ";
cin >> n;
cin.ignore(1); //忽略回车\n,流操作才会清除回车空格,假如输入的是“2\nname1 name2”getline得到是2之后的那个\n
car * ar = new car [n];
for (int i = 0; i < n; ++i)
{

cout << "Car #" << i+1 << ":\n";
cout << "Please enter the make: "<<endl;

cin.getline((ar+i)->make, 20);   //ar+i
cout << "Please enter the year made: ";
cin >> (ar+i)->year; //ar+i
cin.ignore(1);//忽略回车\n
}
cout << "Here is your collection:\n";
for (int j = 0; j < n; ++j)
cout << (ar+j)->year << " " << (ar+j)->make << endl; //ar+j
delete [] ar;
system("pause");
return 0;
}

追问

太感谢了!!我试了一下真的可行!多谢指导了!!!顺便问一下,在百度知道怎么上传像你这样的代码啊?都有不同颜色,左边还标有行数?

追答

只能回答问题的时候用,你可以打开一个问题看看,回答的时候上边有个“代码”的选项,选对应语言插进去就行

温馨提示:内容为网友见解,仅供参考
无其他回答

c++关于cin.getline的用法的疑问
";cin >> n;cin.ignore(1); \/\/忽略回车\\n,流操作才会清除回车空格,假如输入的是“2\\nname1 name2”getline得到是2之后的那个\\ncar * ar = new car [n];for (int i = 0; i < n; ++i){cout << "Car #" << i+1 << ":\\n";cout << "Please enter the make: "<<endl...

关于c++的cin.getline()的问题
getline达到字符数会进入失败状态,ah什么也读不到,没有内容,回车是endl提供的。正确的作法是,cin.getline(ch, 10);cin.clear();cin.getline(ah, 10);

有关c++中cin.getline的问题
你的程序没有什么大问题,就是输入的内容没写到数组中去。。。#include <iostream>void output (const char * ch,int n=1);int main(void){using std::cin;using std::cout;using std::endl;char * ch=new char[20]; \/\/动态数组的创建memset( ch, 0, 20 ); \/\/初始化cout<<"Pl...

c++ cin.getline()的问题
简单的解决方法是在cin>>a;之后加上cin.ignore()来吃掉那个回车。你出现这个问题的原因在于同时使用了两种stream的处理方法——formatted和unformatted。cin>>a是formatted的方法,相当于给你提供了一些方便。但是糅合上使用unformatted的cin.getline()就会出错了。注意用cin的时候只使用一种类型的函数就不会...

c++cin.getline的问题~~ cout<<"请输入十六进制整数:0xff"<<endl; ci...
cin.getline()是按行读取。当位数超过它限定的位数时会停止读取剩下的位数。你所谓的“吸收0后面的字符xff”应该是这样造成的吧。其语法是:cin.getline(字符指针,字符个数n,结束符);功能是:一次读取多个字符(包括空白字符),直到读满n-1个,或者遇到指定 的结束符为止(默认的是\\0)。char a[6]...

cin.getline问题 (C++)
1、问题1:运行后提示内存不能为written,问题出在哪里?是delete语句出错。因为new的时候并没有指出所指空间的大小。所以在delete的时候系统无法或者销毁数据的长度,所以出错。如果new的时候该改为:char *stringOne=new char[30]; \/\/在堆中创建字符串 char *stringTwo=new char[30];char *string...

C++中cin.getline()问题?
最佳答案!!!include<iostream> include<cstring> using namespace std;int main(){ string liu, d, c;int b;cout <<"请输入liu字符:";getline(cin,liu);\/\/这样就不会报错了,cin.getline()的话,需要字符串的长度作为第二参数的,在不知道的情况下,还是这样吧 b=liu.size();cout << b <...

C++问题 为什么cin.getline不能允许用户输入呢
\/\/在cin>>add_command的时候要打一个回车\/\/cin.getline默认以换行符为结束标志\/\/要消耗掉前面的换行符需要多调用一次,如下所示即可cin.getline(Status, 50);cin.getline(Status, 50);

关于C++ cin.getline()问题 为什么在这段代码中 最后输出的会是截取后...
在输入chuang(回车)之后,cin.getline(name, 30, 'a'); 提取了chu到name,同时抛弃了a,输入缓冲区还剩下ng。cout << "Name is " << name << endl;会输出Name is chu并换行。cin.getline(name, 30, '\\n');会提取剩下的ng到name,cout << "Remaining: " << name << endl;会输出...

c++问题 关于cin.getline
问题:输入n的值的时候,如果以回车为结束符,cin缓冲区中还存有'\\n';cin.getline();该函数当在缓冲区中遇到'\\n'中结束,由于输入n时残留的'\\n',第一次调用该函数直接跳过 解决方法:在cin>>n;后加getchar();等语句读出'\\n'或用cin.sync();刷新缓冲区 ...

相似回答