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

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

2024-12-01 16:19:53

你这程序的意思是,输入一个字符串,最长10位,如果输入错误,则直接退出,否则,当读到回车时,输出你输入的数据的前10位,再继续输入
这段代码的意思就是控制输入是程序设计者想要的内容,多余的信息忽略掉!
追问
看一下新的补充 输入大于10位也不会出错,程序会丢弃多余的字符
追答
这就是我上面说的:“控制输入是程序设计者想要的内容,多余的信息忽略掉!”

因为,一般情况下,程序的输入是程序设计者无法控制的,程序的操作者可能会输入的信息多余设计者想要的,因此,为了保证系统运行不出事故(如果你的字符串定义了10个字符的空间,而输入者输入了多余10个的字符,如果全接受,会造成数据越界,导致程序异常),经常会采用你写的这段代码的方式去避免错误。
追问
cin.get(next);
while(next!='\n')
cin.get(next);
这些操作不是很理解 为什么这个循环能实现丢弃余下的字符
追答
这段代码的意思是,先读一个字符next,然后,检查它是不是回车,如果不是,说明:有多余的数据在缓存中,将其读出来(还要读剩余所有不想要的,所以用while循环,直到读到回车),但是不做任何处理
这段代码,其实可以用一个命令进行处理:
在windows下,fflush(stdin);
这个命令就是清除缓存中的数据,以保证下次读取的时候,缓存是空的,只需要读键盘输入的内容。
追问
哦 谢谢
追答
不客气,希望你真的读明白了!
追问
哈哈 书上写丢弃我以为是删除的意思,原来是不做什么处理直接读到回车为止。
追答
o,yeah! 你读懂了,good luck
﹋ˋ︸黑曼斑

2024-12-01 05:13:11

cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
cin.get(字符变量名)可以用来接收字符
你的程序中cin.get(next)是用来判断是否输入换行符
追问
cin.get(字符数组名,接收字符数目)用来接收一行字符串  
那为什么能作为输入?
追答

就是从键盘接收

追问
那cin.get(cin.get(字符变量名)可以用来接收字符) 
为什么编译器不把它也认为是从键盘接收呢 是因为前面输入后已经有内容了吗
追答
因为cin.get()不丢弃缓冲区的换行符,第一次使用完cin.get()后换行符没有被抛弃,换行符被第二次的cin.get()给接受了
追问
嗯 懂了 谢谢
其实你们回答都很好,我就给先来的啦