c++ 中cin.ignore()的使用

#include <fstream>
#include<iostream>
using namespace std;

class Customer //定义一个类
{
private:
char cName[25];
char cCity[25];
char cAddress[50];
char cBirthday[12];

public:
void Accept()
{
cout<<"姓名 : ";
cin.ignore();
cin.getline(cName,25); //输入 "mary"
cout<<cName<<endl; // 显示 “ary”总是丢失第一个字符

cout<<"城市 : ";
cin.ignore();
cin.getline(cCity,50);//同样错误
cout<<cCity<<endl;

cout<<"地址 : ";
cin.ignore();
cin.getline(cAddress,50);//同样错误
cout<<cAddress<<endl;

cout<<"出生日期 : ";
cin>>cBirthday;
cout<<cBirthday;

}
void Display()
{cout<<endl;
cout<< cName<<" "<<cCity<<" "<<cAddress<<" "<<cBirthday
<<endl;

}

};
void main()
{
Customer cusObj;
cusObj.Accept();
cusObj.Display();
}

//--------------------------------------------------------
//试了下 如果把对应的cin.ignore()去掉 则能正常输出
//但我想知道为什么会丢失 我 cin.ignore()是写在 cin.getline()前的啊 目的是 除掉上一次 遗留在缓冲区(流) 内的多余字符啊 ,难到这也有错~~~郁闷了
Thx
还是有点模糊。。。。
不知道cin.ignore()到底是从什么地址开始截取的阿
还有 eof指的什么啊 文件结束符号??

cin.ignore(a,ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin.ignore()函数执行终止;否则,它继续等待。它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。比如可以这么用:cin.ignore(1024,'\n'),通常把第一个参数设置得足够大,这样实际上总是只有第二个参数'\n'起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲(流)中清除出去。

你不给参数,则默认参数为cin.ignore(1,EOF),即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束,就是这样啊,所以你每次都少一个字符.
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-04
cin.ignore(a,ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin.ignore()函数执行终止;否则,它继续等待。
第2个回答  2018-03-05
感觉你的程序不需要 cin.ignore()

c++ 中cin.ignore()的使用
cin.ignore(a,ch)方法是从输入流(cin)中提取字符,提取的字符被忽略(ignore),不被使用。每抛弃一个字符,它都要计数和比较字符:如果计数值达到a或者被抛弃的字符是ch,则cin.ignore()函数执行终止;否则,它继续等待。它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入...

c++中cin.ignore()的问题如何解决
由ignore()读入的字符的个数默认为1,所以不用参数调用ignore()就意味着“丢掉下一个字符”。ignore()也可以用一个结束符(像getline()一样),在读入中遇到这个结束符时,就将它从输入流中删除。注意,ignore()的默认结束符是文件结束。所以,你应该写 std::cin.ignore(80, '\\n');最多读入80...

关于C++中cin.ignore()的问题
这只是我的猜测:读入b时遇到回车截止,之后的getline函数把cin流中b之后的回车读入了,于是将name置零了(这便是你说的ignore放在getline后的情况)。调用ignore后忽略掉了这个回车,于是可以读取。用cin>>name应该可以正常读入,但是不能读入空格。

c++不知道这里的cin.ignore具体在这一题中的一起,希望给出解释。
cin在读入字符时会把缓冲区内当前字符读入(不会忽略空白)cin.ignore(80, '\\n')的含义是把缓冲区内从当前字符开始知道'\\n'之前字符(如果有80个的话)忽略掉,实际上你这里假设一行不会超过80个字符,所以含义是忽略一行

c++ cin的问题
cin.ignore()如果默认不给参数的话,默认参数为cin.ignore(1, EOF)——如果计数值达到 1或者被抛弃的字符是 EOF,则cin.ignore() 函数执行终止;否则,它继续等待,即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束。cin这个输入流函数遇到EOF后,会返回一个false值当前读入结束while ...

C++中cin.clear();cin.ignore();
cout < <str < <endl;system( "pause ");return 0;} 如果你在调用了cin对象运算符'>>'之后需要立即调用getline()函数,那么新行字符必须从输入缓冲区中提取出来。这是通用调用ignore()函数实现的。'>>'遇到空白区域(包括空格)就为止。Cin的对象的get()和getline()函数允许数据带有空格输入 ...

C++ cin.ignore(),cin.clear()的讲解
clear是清除错误标志 比如你要输入一个整数int型,但是你输入了一个字符,这时候cin流中就会置一个错误标志,你再输入其他数据都会受到影响,简单的理解,流错了,咋弄都白扯(典型的错误就是你输错之后,如果是循环输入的,后面都不提示你输入了,死循环)clear就是清除这个标记,让你可以继续输入 ...

C++ cin的用法
cin 函数用法:cin.get() char ch; ch=cin.get();\/\/cin.get(ch) 可接收字符,不管输入多少,但只能接受第一个 cout << ch << endl; getchar() \/\/接收一个字符,要包含#include <string> char ch; ch=getchar();\/\/括号里面无参数cin.get(ch); ...

c++ 中cin.ignore(100,'\\n');是什么意思?有什么作用?谢谢啦
这句话的意思是说对于输入流的前一百的字符内如果存在\\n 的话,那么在\\n 之前的字符全部忽略掉, \\n之后的字符依然有效, 对于模板库, 还是上MSDN自己去查比较好。参考资料:http:\/\/msdn.microsoft.com\/zh-cn\/library\/3w23zf49.aspx#CommunityContent ...

c++ 中的cin 问题?
cin.ignore();\/*读到非法字符后,输入流将处于出错状态,为 了继续获取输入,首先要调用clear函数 来清除输入流的错误标记,然后才能调用 ignore函数来清除输入缓冲区中的数据。 *\/ 从我以前的代码里直接弄出来的,呵呵,终于感觉注释的好处了。希望能帮上忙,我这个是用来解决非法字符导致的死循环的。

相似回答