C++中cin.get()的具体用法
另外,在百度知道里有个问题我弄不清楚,希望能解释下.谢谢.
问题:下列程序中,为什么第二次cin。get()不能用??
#include<iostream.h>
void main()
{
char ch;
ch=cin.get();//读入一个大写字符
ch=ch+32;//通过ascii码把大写的字母转化为小写的 /*-------小写的ascii码比大写的大32;
cout<<ch<<endl;
char num;
num=cin.get();//读入字符类型的
int a;
a=num-48;
cout<<a<<endl;
}
最佳答案:回答者:mhaha
你运行时想输入A,会按A 回车,cin.get()会把回车('\n')当作字符(num)读了,然后``````
char ch;
cin>>ch;
char num;
cin>>num;
这样(>>)会跳过回车符或者空格 展开
用法有以下几种:
1、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>
using namespace std;
main ()
{
char a[20];
cin.get(a,20);
cout<<a<<endl;
}
输入:jkl jkl jkl
输出:jkl jkl jkl
输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\0')
用法3:cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足。
扩展资料:
get()函数比较灵活,有3种常用的重载形式:
1、和put()对应的形式:ifstream &get(char &ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。
2、重载形式的原型是: int get();这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。
3、原型是:ifstream &get(char *buf,int num,char delim='\n');这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由 delim 指定的字符,如果没使用 delim 这个参数,将使用缺省值换行符'\n'。例如:
file2.get(str1,127,'A'); //从文件中读取字符到字符串str1,当遇到字符'A'或读取了127个字符时终止。
4、从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。
5、在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。下面就把此类的文件操作过程一一道来。
参考资料来源:IT专家网-C++
cin.get()是保留回车在输入流队列中的,
而cin是丢弃回车的。
ch=cin.get();是第一次输入,因为是刚开始,所以没有回车保留在输入流的队列中。这时你输入一个字符,然后回车。get()收到回车或空格或制表符就停止输入了、此时,输入流队列中留下一个回车。
num=cin.get();这是第二次输入。因为第一次用了get,所以输入流队列中有个回车。则get()接受这个回车。又因为get()收到回车或空格或制表符就停止输入。
所以这一次的输入就是一个回车,
可以num=cin.get();之前把回车给弄了。你应该想到了。就用cin.get(),把第一次输入留下的回车给弄走.则num=cin.get()就可以正常了。
扩展资料
cin运行机制解析:
C++的cin究竟确切含义是什么呢?很多初学者第一次接触cin时,当程序运行到cin指令时,程序自动会中断,然后等待用户从键盘中输入信息。只有当用户输入完成,按下回车之后,程序才会继续往下运行。
这个过程很容易让初学者产生误会,认为cin就是调用电脑键盘进行输入的指令。也是因为这个错误的认知,会引起一系列的误会。例如上文中图4,虽然程序中有三次cin,但其实我们只要从键盘里输入一次,就可以完成全部输入工作,不一定非得分开三次从键盘输入。
cin本质和其它C++变量一样,它也是一个变量名,它被定义在iostream文件里。因此,我们要使用cin功能时,就必须导入头文件<iostream>。在C++中,变量名通常实质是代表着一段内存区域,
同样的道理,cin这个变量其实也是映射到一段内存区域里面,我们可以认为cin实际上代表着一段内存缓冲区,这段缓冲区的作用是,用于缓存从键盘输入的信息。
该函数有多种重载形式,分为四种格式:无参,一参数,二参数,三个参数。常用的的函数原型如下:
1,int cin.get();
2,istream& cin.get(char& var);
3,istream& get ( char* s, streamsize n );
4,istream& get ( char* s, streamsize n, char delim )。
其中streamsize 在VC++中被定义为long long型。另外,还有两个重载形式不怎么使用,就不详述了,函数原型如下:
1,istream& get ( streambuf& sb);
2,istream& get ( streambuf& sb, char delim );
cin.get读取一个字符,可以使用cin.get或者cin.get(var),示例代码如下:
#include <iostream>
using namespace std;
int main()
{
char a;
char b;
a=cin.get();
cin.get(b);
cout<<a<<b<<endl;
system("pause");
return 0;
}
扩展资料
cin.getline()与他相比,比较粗一些。举例:先定义字符数组 char a[20];cin.getline(a,20);即把数组的内容读入进来。它通过换行符来确定行尾,但不保存换行符。
cin.get()则将换行符留在输入队列中。举例:假设我们两次调用cin.get():cin.get(a,20);cin.get(b,20);
如果不借助帮助,cin.get(b,20)无法读入,因为换行符留在了输入队列,第二次调用时读的第一个字符便是换行符,所以无法读入新的内容。同样的规则,借助不带参数的cin.get();在上例中的两句之间加入cin.get();用它吃掉换行符。
参考资料:百度百科 - C++
cin.get()是保留回车在输入流队列中的,
而cin是丢弃回车的。
ch=cin.get();是第一次输入,因为是刚开始,所以没有回车保留在输入流的队列中。这时你输入一个字符,然后回车。get()收到回车或空格或制表符就停止输入了、此时,输入流队列中留下一个回车。
num=cin.get();这是第二次输入。因为第一次用了get,所以输入流队列中有个回车。则get()接受这个回车。又因为get()收到回车或空格或制表符就停止输入。
所以这一次的输入就是一个回车,可以num=cin.get();之前把回车给弄了。你应该想到了。就用cin.get(),把第一次输入留下的回车给弄走.则num=cin.get()就可以正常了。
扩展资料
cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格
#include <iostream>
using namespace std;
main ()
{
char a[20];
cin.get(a,20);
cout<<a<<endl;
}
输入:jkl jkl jkl
输出:jkl jkl jkl
输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\0')
参考资料:百度百科 - cin
ch=cin.get();是第一次输入,因为是刚开始,所以没有回车保留在输入流的队列中.这时你输入一个字符,然后回车.get()收到回车或空格或制表符就停止输入了.此时,输入流队列中留下一个回车.
num=cin.get();这是第二次输入.因为第一次用了get,所以输入流队列中有个回车.则get()接受这个回车.又因为get()收到回车或空格或制表符就停止输入.所以这一次的输入就是一个回车.
可以num=cin.get();之前把回车给弄了.你应该想到了.就用cin.get();把第一次输入留下的回车给弄走.则num=cin.get()就可以正常了.
<C++ primer plus>说得很详细你去看看就会明白了.