C++输入语句cin get区别
C++中get()和getline和cin_clear等的比较

C++中cin.get()和cin.getline和cin.clear的比较(说明:以下所有程序在win8 64位专业版vs2012上面成功运行)cin.get(),它是一个读取单个字符的方法。
字符变量=cin.get(),相当于cin.get(字符变量)。
例一:#include <iostream>using namespace std;int main(){char cstr;cstr = cin.get(); //读取单个字符,在屏幕输入,相当于cin.get(cstr);cout<<cstr<<endl; //输出刚刚载入的单个字符system("pause"); //进行暂停,否则会一闪而过return 0;}运行程序后输入:a回车输出:a但当输入的为多个英文字符时,那又会如何呢?输入:abcd回车输出:a结论:cin.get()只能读取第一个字符例二:#include <iostream>using namespace std;int main(){char str1;char str2;str1 = cin.get(); //读取单个字符,在屏幕输入str2 = cin.get();cout << str1 << str2 <<endl; //输出刚刚载入的单个字符system("pause"); //进行暂停,否则会一闪而过return 0;}运行程序后输入:abcd回车输出:ab既然cin.get()是读取第一个字符,那str2为什么不也是a呢?原理如下:在cin这个对象里,有一个储存字符的流,可以想象成缓冲区,事实上是cin里封装的一个东西.当我们在程序上输入字符后,对象cin获得了我们输入的字符。
例如获得abcd回车,然后再通过.get()把流里面的第一个字符去掉,赋给str1,这时,cin里储存的流的数据为bcd 回车,而str1则获得了a。
cin.get()和cin.getline()之间的区别

复制代码 代码如下:
#include <iostream> using std::cin; using std::cout; const int SIZE = 15; int main( ){ cout << "Enter your name:"; char name[SIZE]; cin.get(name,SIZE); cout << "name:" << name; cout << "\nEnter your address:"; char address[SIZE]; cin.get(address,SIZE); cout << "address:" << address; }
输出: Enter your name:jimmyi shi name:jimmyi shi Enter your address:YN QJ address:YN QJ
由于由Enter生成的换行符被抛弃了,所以不会影响下一次cin.get()对地址的读取。 如果cin.get()是一个一个字符的读入,但是cin.get()不会忽略任何字符,对于回车符需要单独处理。
(1) 学会区别get()与getline(); (次读取一整行并把由Enter键生成的换行符抛弃,如:
复制代码 代码如下:
#include <iostream> using std::cin; using std::cout; const int SIZE = 15; int main( ){ cout << "Enter your name:"; char name[SIZE]; cin.getline(name,SIZE); cout << "name:" << name; cout << "/nEnter your address:"; char address[SIZE]; cin.get(address,SIZE); cout << "address:" << address; }
C++中cin的使用总结

C++中cin的使⽤总结 在学习C++时⼤家肯定迷惑过关于输⼊输出各种输出函数的功能,现在来总结⼀下各种函数的简单⽤法。
cin建有⼀个缓冲区,即输⼊缓冲区。
⼀次输⼊过程是这样的,当⼀次键盘输⼊结束时会将输⼊的数据存⼊输⼊缓冲区,⽽cin函数直接从输⼊缓冲区中取数据。
正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据⽽不会请求键盘输⼊,这就是为什么有时会出现输⼊语句失效的原因。
1.cin>>函数的⽤法:这是我们最经常⽤,学习C++最初接触的输⼊流。
⽤法1.接受⼀个字符串的输⼊,遇到“空格”"TAB""回车“结束。
#include <iostream> using namespace std; void main () { char a[10]; cin>>a; cout<<a<<endl; } 输⼊:aaabbbccc 输出:aaabbbccc 输⼊:aaa bbb ccc 输出:aaa 2.输⼊⼀个数字。
#include <iostream> using namespace std; void main () { int a,b; cin>>a>>b; cout<<a+b<<endl; } 输⼊:1回车2回车 输出:3 2.cin.get()的⽤法,这函数有三种形式,cin.get(),cin.get(charch),cin.get(array,length)。
⽤法1.cin.get() ⽤于读取⼀个字符,结束条件是回车,不过不会丢弃缓冲区的回车(enter)和空格,cin.get()和cin.get(char ch)功能基本⼀样的,char = cin.get()和cin.get(char ch)共能⼀样。
cin用法

cin用法
cin 用法
1. cin 用于从键盘读取数据:
cin(取cin的全称为“character input stream”)是C++中的一种输入流,
允许用户从键盘输入程序中所需的标准格式的数据。
2. 语法:
cin >> variable;
其中“variable”可以是任何类型,可以是int,float,double,字符串等。
3. 示例:
以下是用cin从键盘输入一个整数的一个示例:
#include <iostream>
int main()
{
int x;
cout<<"Enter an integer:";
cin>>x;
cout<<"You entered "<<x;
return 0;
}
4. 常用方法:
(1)cin 返回布尔值:cin 输入失败或出现错误时,cin 返回 false;输
入成功时,cin 返回 true。
(2)使用 cin.get():你可以使用 cin.get() 方法从键盘读入一个单个字符,而不是依次读入每一个字符;
(3)使用 cin.ignore():cin.ignore() 方法让你忽略从键盘输入的某个字符;
(4)使用 cin.clear():如果在某个程序中出现了“cin 出错”,则可以使用 cin.clear() 来清楚无效的缓冲器内容。
通过上述说明,我们可以看出 cin 是一个非常方便实用的输入流,能够帮助我们从键盘输入程序所需的数据。
深入了解scanf()getchar()和gets()等函数

C/C++学习笔记1 - 深入了解scanf()/getchar()和gets()等函数----------------------------------------------------| 问题描述一:(分析scanf()和getchar()读取字符)|----------------------------------------------------scanf(), getchar()等都是标准输入函数,一般人都会觉得这几个函数非常简单,没什么特殊的。
但是有时候却就是因为使用这些函数除了问题,却找不出其中的原因。
下面先看一个很简单的程序:程序1:#include <stdio.h>int main(){char ch1, ch2;scanf("%c", &ch1);scanf("%c", &ch2);printf("%d %d/n", ch1, ch2);return 0;}或者是:#include <stdio.h>int main(){char ch1, ch2;ch1 = getchar();ch2 = getchar();printf("%d %d/n", ch1, ch2);return 0;}程序的本意很简单,就是从键盘读入两个字符,然后打印出这两个字符的ASCII码值。
可是执行程序后会发现除了问题:当从键盘输入一个字符后,就打印出了结果,根本就没有输入第二个字符程序就结束了。
例如用户输入字符'a', 打印结果是97,10。
这是为什么呢?【分析】:首先我们呢看一下输入操作的原理,程序的输入都建有一个缓冲区,即输入缓冲区。
一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。
正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是例子中为什么会出现输入语句失效的原因!其实这里的10恰好是回车符!这是因为scanf()和getchar()函数是从输入流缓冲区中读取值的,而并非从键盘(也就是终端)缓冲区读取。
C++中用cin方式获取输入的几种常用方式

C++中⽤cin⽅式获取输⼊的⼏种常⽤⽅式⼀、前⾔ 在C++程序的编写过程中,可能会经常⽤到cin⽅式⽤来捕获输⼊设备的输⼊信息。
细分的话,主要的⽅式有:cin>>、cin.get、cin.getline。
在借助键盘等字符输⼊设备进⾏输⼊的时候,如果键⼊Enter(\r)才会把⽬标字符输⼊到缓存区,,键⼊的'\r'会被转换成⼀个'\n',这个换⾏符同样也会被输⼊到缓存区,当做⼀个键⼊字符来处理。
参考资料:⼆、测试环境 Win10 + Visual Studio 2017 + Debug (x86)三、cin>>⽅式 可以从输⼊设备连续提取输⼊信息,其中,可以作为分格符使⽤的有Tab、空格(Space),换⾏符是⽤作结束符使⽤。
1 #include "pch.h"2 #include <iostream>3 #include <string>4 #include <vector>56using namespace std;78int main(void) {9string str;10while (cin >> str) {11 cout << str << '\n' << endl;12 }13return0;14 } 测试结果如下【输⼊:orange[Space]juice[Tab]orange[Enter]】。
1 orange juice orange2 orange34 juice56 orange 这种⽅式下的str,经过调试发现,并不会在最后出现截⽌符‘\0’。
(1)、cin>> 等价于cin.operator>>(),调⽤成员函数operator>>()进⾏数据的读取; (2)、当cin>>⽅式从缓存区读取数据时,会⾃动忽略作为第⼀个字符存在的Tab、空格(Space)、换⾏,继续读取下⼀个字符,若缓存区为空,则继续等待。
C++cin.getline及getline()用法详解

C++cin.getline及getline()⽤法详解下⾯先看下C++ cin.getline⽤法,具体内容如下所⽰:使⽤ C++ 字符数组与使⽤ string 对象还有另⼀种不同的⽅式,就是在处理它们时必须使⽤不同的函数集。
例如,要读取⼀⾏输⼊,必须使⽤ cin.getline ⽽不是 getline 函数。
这两个的名字看起来很像,但它们是两个不同的函数,不可互换。
与 getline ⼀样,cin.getline 允许读取包含空格的字符串。
它将继续读取,直到它读取⾄最⼤指定的字符数,或直到按下了回车键。
以下是其⽤法⽰例:cin.getline(sentence, 20);getline 函数使⽤两个⽤逗号分隔的参数。
第⼀个参数是要存储字符串的数组的名称。
第⼆个参数是数组的⼤⼩。
当cin.getline 语句执⾏时,cin 读取的字符数将⽐该数字少⼀个,为 null 终⽌符留出空间。
这样就不需要使⽤ setw 操作符或width 函数。
以上语句最多可读取 19 个字符,null 终⽌符将⾃动放在数组最后⼀个字符的后⾯。
下⾯的程序演⽰了 getline 函数的⽤法,它最多可以读取 80 个字符:// This program demonstrates cinT s getline function// to read a line of text into a C-string.#include <iostream>、using namespace std;int main(){const int SIZE = 81;char sentence[SIZE];cout << "Enter a sentence: ";cin.getline (sentence, SIZE);cout << "You entered " << sentence << endl;return 0;}程序输出结果:Enter a sentence: To be, or not to be, that is the question.You entered To be, or not to be, that is the question.补充:C++ getline()的两种⽤法getline():⽤于读⼊⼀整⾏的数据。
scanf gets getchar getch 的区别

c=getch(); /*从键盘上读入一个字符不回显送给字符变量c*/putchar(c); /*输出该字符*/ch=getche(); /*从键盘上带回显的读入一个字符送给字符变量ch*/ putchar(ch);}利用回显和不回显的特点, 这两个函数经常用于交互输入的过程中完成暂停等功能。
例2:#include<stdio.h>main(){char c, s[20];printf("Name:");gets(s);printf("Press any key to continue...");getch(); /*等待输入任一键*/}(2) getchar()函数getchar()函数也是从键盘上读入一个字符, 并带回显。
它与前面两个函数的区别在于: getchar()函数等待输入直到按回车才结束, 回车前的所有输入字符都会逐个显示在屏幕上。
但只有第一个字符作为函数的返回值。
getchar()函数的调用格式为:getchar();例3:#include<stdio.h>main(){char c;c=getchar(); /*从键盘读入字符直到回车结束*/putchar(c); /*显示输入的第一个字符*/getch(); /*等待按任一健*/}例4#include<stdio.h>main(){char c;while ((c=getchar())!='\n') /*每个getchar()依次读入一个字符*/printf("%c",c); /*按照原样输出*/getch(); /*等待按任一健*/}引用楼主youyana1 的回复:这几个函数总是弄的很迷惑!谁能帮忙解释下谢谢了。
比如我同时用两个scanf语句录入,如下,会出错printf("请输入要插入的字符\n");scanf("%c",&m);printf("请输入要插入的位置\n");scanf("%d",&n);当屏幕提示插入字符时,我输入了一串m3n6x然后回车,然后就不让我接着输入插入位置了,请问m,n的值……这个要知道scanf()的工作原理:scanf函数本质上时一种"模式匹配"函数,也就是试图把输入的字符串与转换说明匹配成组.调用时,scanf函数从左边处理字符串中的信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cin,cin.get(),cin.getline()区别
与前一节中提到的scanf函数一样,程序的输入都建有一个缓冲区,即输入缓冲区。
一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。
正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是例子中为什么会出现输入语句失效的原因!
二.1.cin>>:
(1)该操作符是根据后面变量的类型读取数据。
输入结束条件:遇到Enter、Space、Tab键。
(这个很重要!)
对结束符的处理:丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)
(2)程序示例:(读字符串的情况)
#include <iostream>
using namespace std;
int main()
{
char str1[10], str2[10];
cin>>str1;
cin>>str2;
cout<<str1<<endl;
cout<<str2<<endl;
return 0;
}
测试一输入:
abcd[Enter]
efgh[Enter]
输出:
abcd
efgh
【分析】输入遇到回车符结束,很正常。
测试二输入:
abcdefgh
abcd
efgh
【分析】第一次读取字符串时遇到空格则停止了,将abcd读入str1,并舍弃了空格,将后面的字符串给了第二个字符串。
这证明了cin读入数据遇到空格结束;并且丢弃空格符;缓冲区有残留数据室,读入操作直接从缓冲区中取数据
2.cin.get():
(1)该函数有三种格式:无参,一参数,二参数
即cin.get(), cin.get(char ch), cin.get(array_name, Arsize)
读取字符的情况:
输入结束条件:Enter键
对结束符处理:不丢弃缓冲区中的Enter
cin.get() 与cin.get(char ch)用于读取字符,他们的使用是相似的,
即:ch=cin.get() 与cin.get(ch)是等价的。
(2)程序示例1:
#include <iostream>
using namespace std;
int main()
{
char c1, c2;
cin.get(c1);
cin.get(c2);
cout<<c1<<" "<<c2<<endl; // 打印两个字符
cout<<(int)c1<<" "<<(int)c2<<endl; // 打印这两个字符的ASCII值
return 0;
}
测试一输入:
a[Enter]
输出:
a
【分析】会发现只执行了一次从键盘输入,显然第一个字符变量取的'a', 第二个变量取的是Enter(ASCII值为10),这是因为该函数不丢弃上次输入结束时的Enter字符,所以第一次输入结束时缓冲区中残留的是上次输入结束时的Enter字符!
测试二输入:
a b[Enter]
输出:
a
97 32
【分析】显然第一个字符变量取的'a', 第二个变量取的是Space(ASCII值为32)。
原因同上,没有丢弃Space字符
程序示例2:读取字符串的情况:
cin.get(array_name, Arsize)是用来读取字符串的,可以接受空格字符,遇到Enter结束输入,按照长度(Arsize)读取字符, 会丢弃最后的Enter字符。
#include <iostream>
using namespace std;
int main ()
{
char ch, a[20];
cin.get(a, 5);
cin>>ch;
cout<<a<<endl;
cout<<(int)ch<<endl;
return 0;
}
测试一输入:
12345[Enter]
输出:
1234
53
【分析】第一次输入超长,字符串按长度取了"1234",而'5'仍残留在缓冲区中,所以第二次输入字符没有从键盘读入,而是直接取了'5',所以打印的ASCII值是53('5'的ASCII
测试二输入:
1234[Enter]
a[Enter]
输出:
1234
97
【分析】第二次输入有效,说明该函数把第一次输入后的Enter丢弃了!
3.cin.getline():
(1)cin.getline() 与cin.get(array_name, Arsize)的读取方式差不多,以Enter结束,可以接受空格字符。
按照长度(Arsize)读取字符, 会丢弃最后的Enter字符。
但是这两个函数是有区别的:
cin.get(array_name, Arsize)当输入的字符串超长时,不会引起cin函数的错误,后面的cin操作会继续执行,只是直接从缓冲区中取数据。
但是cin.getline()当输入超长时,会引起cin函数的错误,后面的cin操作将不再执行。
(具体原因将在下一部分"cin的错误处理"中详细介绍)
(2)程序示例:
#include <iostream>
using namespace std;
int main ()
{
char ch, a[20];
cin.getline(a, 5);
cin>>ch;
cout<<a<<endl;
cout<<(int)ch<<endl;
return 0;
}
测试输入:
12345[Enter]
输出:
-52
【分析】与cin.get(array_name, Arsize)的例程比较会发现,这里的ch并没有读取缓冲区中的5,而是返回了-52,这里其实cin>>ch语句没有执行,是因为cin出错了!下一部分将详细介绍。