关于C++的cin.get()的用法 问题在补充里

为什么cin.get(input,max)是输入而cin.get(next)就变成了读取
还有cin.get(next);while(next!='\n') cin.get(next); 不是很理解
书上说 如果next是换行符,说明cin.get(intput,max)读取了整行;否则说明行中还有字符没有被读取,随后,程序用一个循环来丢弃余下的字符 我测试下来是对的
这几句不是很理解 原理是什么

你这程序的意思是,输入一个字符串,最长10位,如果输入错误,则直接退出,否则,当读到回车时,输出你输入的数据的前10位,再继续输入
这段代码的意思就是控制输入是程序设计者想要的内容,多余的信息忽略掉!追问

看一下新的补充 输入大于10位也不会出错,程序会丢弃多余的字符

追答

这就是我上面说的:“控制输入是程序设计者想要的内容,多余的信息忽略掉!”

因为,一般情况下,程序的输入是程序设计者无法控制的,程序的操作者可能会输入的信息多余设计者想要的,因此,为了保证系统运行不出事故(如果你的字符串定义了10个字符的空间,而输入者输入了多余10个的字符,如果全接受,会造成数据越界,导致程序异常),经常会采用你写的这段代码的方式去避免错误。

追问

cin.get(next);
while(next!='\n')
cin.get(next);
这些操作不是很理解 为什么这个循环能实现丢弃余下的字符

追答

这段代码的意思是,先读一个字符next,然后,检查它是不是回车,如果不是,说明:有多余的数据在缓存中,将其读出来(还要读剩余所有不想要的,所以用while循环,直到读到回车),但是不做任何处理
这段代码,其实可以用一个命令进行处理:
在windows下,fflush(stdin);
这个命令就是清除缓存中的数据,以保证下次读取的时候,缓存是空的,只需要读键盘输入的内容。

追问

哦 谢谢

追答

不客气,希望你真的读明白了!

追问

哈哈 书上写丢弃我以为是删除的意思,原来是不做什么处理直接读到回车为止。

追答

o,yeah! 你读懂了,good luck

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-08-18
cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
cin.get(字符变量名)可以用来接收字符
你的程序中cin.get(next)是用来判断是否输入换行符追问

cin.get(字符数组名,接收字符数目)用来接收一行字符串
那为什么能作为输入?

追答

就是从键盘接收

追问

那cin.get(cin.get(字符变量名)可以用来接收字符)
为什么编译器不把它也认为是从键盘接收呢 是因为前面输入后已经有内容了吗

追答

因为cin.get()不丢弃缓冲区的换行符,第一次使用完cin.get()后换行符没有被抛弃,换行符被第二次的cin.get()给接受了

追问

嗯 懂了 谢谢
其实你们回答都很好,我就给先来的啦

关于C++的cin.get()的用法 问题在补充里
你这程序的意思是,输入一个字符串,最长10位,如果输入错误,则直接退出,否则,当读到回车时,输出你输入的数据的前10位,再继续输入 这段代码的意思就是控制输入是程序设计者想要的内容,多余的信息忽略掉!

C++中关于cin.get()的问题
cin.get()是用来读取多余回车符号的。保留cin.get()的时候,程序执行流程如下:你输入的google+回车,被getline(cin, titles[i])读掉,然后你输入的10被cin >> ratings[i]读掉,10后面的回车被cin.get()读掉。然后正常进入下一次循环。去掉cin.get()之后,流程如下:google+回车,被getline读取。1...

C++中cin.get()的具体用法
cin.get()是保留回车在输入流队列中的,而cin是丢弃回车的。ch=cin.get();是第一次输入,因为是刚开始,所以没有回车保留在输入流的队列中。这时你输入一个字符,然后回车。get()收到回车或空格或制表符就停止输入了、此时,输入流队列中留下一个回车。num=cin.get();这是第二次输入。因为第...

c++中cin.get()的具体用法
`cin.get`是C++中的输入函数,用于从标准输入流获取字符。二、详细解释 1. 获取单个字符:当`cin.get`不带参数时,它会读取并返回下一个字符。例如:cpp char ch;cin.get; \/\/ 从标准输入读取一个字符并存储在变量ch中。2. 获取字符串:当使用带有一个参数的`cin.get`时,可以读取一个字符串。

关于C++的cin.get()的问题
cin>>a;cout<<a<<endl;} 输入:jkljkljkl 输出:jkljkljkl 输入:jkljkl jkljkl \/\/遇空格结束 输出:jkljkl 2、cin.get()用法1: cin.get(字符变量名)可以用来接收字符 include <iostream> using namespace std;main (){ char ch;ch=cin.get(); \/\/或者cin.get(ch);cout<<ch<<endl...

[C++] cin.get() 语法问题
第一个cin.get(array, 10, 'a');只读到Mi,遇到'a'停止读;第二个cin.get(array, 10, 'a');会产生“读缓冲区错误”,因为缓冲区中'a'前面已没有字符了(被第一次读走了),所以array中是个空字符串,输出是什么也没有。到了while((character=cin.get())!=EOF){},要循环到输入缓冲区...

c++中的cin.get()的用法
用法1: cin.get(字符变量名)可以用来接收字符 include <iostream> using namespace std;main (){ char ch;ch=cin.get(); \/\/或者cin.get(ch);cout<<ch<<endl;} 输入:jljkljkl 输出:j 用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格 include <iostream> ...

C++,cin.get()用法
cin.get(ch);ch=cin.get();如果程序正在使用get函数简单地暂停屏幕直到按回车键,并且不需要存储字符,则该函数也可以这样调用:cin.get();在所有这3个编程语句中,get函数调用的格式实际上是一样的。首先是对象的名称,在此示例中它是cin。然后是一个句点,其后是被调用的成员函数的名称,在这里...

关于C++中cin()和cin.get()的用法,问题如下
用来接收你输入的字符串的下一个字符达到统计字符的数目的目的。cin.get(ch)这条语句每次只能接受一个字符。而你开始时候是输入一段字符串。而第一个cin.get(ch)只接受了你输入的字符串的第一个字符,后面的字符都还在缓冲区里面没有取出。而循环体里面的cin.get(ch)不会再要求你输入字符就是因为...

关于c++中cin和cin.get用法问题
delim直到下一次不会被读取),读取字符到buffer中,直到碰到换行或EOF, 或是读取字符到buffer中,直到碰到换行,EOF或delim。(相反, delim直到下一个get()不会被读取 ).你的两个程序,在每个cout<<"what is your first name? \\n";前加上cin.get();吃掉之前的回车换行字符即可!

相似回答