鱼C论坛

 找回密码
 立即注册
查看: 2155|回复: 1

[技术交流] 【学习笔记】C++语言cin.get()用法【转载】

[复制链接]
发表于 2019-11-26 14:27:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
转自:https://www.cnblogs.com/ljhacm/p/6914243.html

cin.get
get()函数是cin输入流对象的成员函数,它有3种形式:无参数的,有一个参数的,有3个参数的。

1) 不带参数的get函数
其调用形式为
    cin.get()
用来从指定的输入流中提取一个字符(包括空白字符),函数的返回值就是读入的字符。 若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF(End Of File),一般以-1代表EOF,用-1而不用0或正值,是考虑到不与字符的ASCII代码混淆,但不同的C ++系统所用的EOF值有可能不同。


  1.     #include <iostream>
  2.     using namespace std;
  3.     int main( )
  4.     {
  5.        int c;
  6.        cout<<"enter a sentence:"<<endl;
  7.        while((c=cin.get())!=EOF)
  8.           cout.put(c);
  9.        return 0;
  10.     }
复制代码



2) 有一个参数的get函数
其调用形式为
    cin.get(ch)
其作用是从输入流中读取一个字符,赋给字符变量ch。如果读取成功则函数返回true(真),如失败(遇文件结束符) 则函数返回false(假)。

  1.     #include <iostream>
  2.     using namespace std;
  3.     int main( )
  4.     {
  5.        char c;
  6.        cout<<"enter a sentence:"<<endl;
  7.        while(cin.get(c))  //读取一个字符赋给字符变量c,如果读取成功,cin.get(c)为真
  8.        {cout.put(c);}
  9.        cout<<"end"<<endl;
  10.        return 0;
  11.     }
复制代码


3) 有3个参数的get函数
其调用形式为
    cin.get(字符数组, 字符个数n, 终止字符)

    cin.get(字符指针, 字符个数n, 终止字符)
其作用是从输入流中读取n-1个字符,赋给指定的字符数组(或字符指针指向的数组),如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回true(真),如失败(遇文件结束符) 则函数返回false(假)。再将例13.6改写如下:


  1.     #include <iostream>
  2.     using namespace std;
  3.     int main( )
  4.     {
  5.        char ch[20];
  6.        cout<<"enter a sentence:"<<endl;
  7.        cin.get(ch,10,'x');//指定x为终止字符
  8.       cout<<ch<<endl;
  9.        return 0;
  10.     }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-11-26 14:37:09 | 显示全部楼层
cin.ignore()的用法【转载】

原文链接:https://blog.csdn.net/wxbmelisky/article/details/48596881
cin.ignore()函数是C++标准输入流(cin)中的一个方法。cin.ignore()函数中有两个参数,分别为数值型的a 和 字符型的 ch ,即cin.ignore( a, ch )。它表示从输入流 cin 中提取字符,提取的字符被忽略,不被使用。而每抛弃一个字符,它都要进行计数和比较字符:如果计数值达到 a 或者被抛弃的字符是 ch ,则cin.ignore() 函数执行终止;否则,它继续等待。

它的一个常用功能就是用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。例如可以这么用,cin.ignore(1024, '\n'),通常把第一个参数设置得足够大,这样实际上是为了只有第二个参数 '\n' 起作用,所以这一句就是把回车(包括回车)之前的所以字符从输入缓冲流中清除出去。

如果默认不给参数的话,默认参数为cin.ignore(1, EOF),即把EOF前的1个字符清掉,没有遇到EOF就清掉一个字符然后结束。

下面用一个例子简单说明cin.ignore()函数的用法:

比如我们要求接受输入一个字符串(没有空格),然后输出该字符串。C++代码如下:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.     char str[30];
  6.     cout << "请输入一个字符串:";
  7.     cin >> str;
  8.     cout << str << endl;

  9.     return 0;
  10. }
复制代码


当按下任意键时,运行程序会立即退出。如果想让程序停留一下,不要立即退出。我们很容易想到让程序末尾再接受一个输入,输入任意一个字符后程序退出。因此,我们在原先代码加上一个输入即cin.get(),代码如下:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.         char str[30];
  6.         cout << "请输入一个字符串:";
  7.         cin >> str;
  8.         cout << str << endl;

  9.         cout << "请输入任意字符结束程序!\n";
  10.         cin.get();

  11.         return 0;
  12. }
复制代码

按下任意键程序仍然会立即退出而不停留,这与我们想要的结果不一致。这是为什么呢?

如果在程序末尾再多接受一个输入,即在代码上再加一个cin.get()=

此时输入字符 a 时,程序没有立即退出,达到了我们预计的要求。

回过头来想,为什么加入第一个cin.get()不行呢?那肯定是因为第一个cin.get()获取了某个字符,仔细考虑一下,不难想到当输入"hello"过后按下了回车键,因而第一个cin.get()获取到的就是 '\n' 。在不加入第二个cin.get()情况下,我们可以想到用cin.ignore()函数,将cin中提取的 '\n' 忽略掉。具体代码如下:

  1. #include <iostream>
  2. using namespace std;

  3. int main()
  4. {
  5.         char str[30];
  6.         cout << "请输入一个字符串:";
  7.         cin >> str;
  8.         cout << str << endl;

  9.         cin.ignore(100, '\n');
  10.         cout << "请输入任意字符结束程序!\n";
  11.         cin.get();

  12.         return 0;
  13. }
复制代码


此时,和加入两个cin.get()一样得到相同的结果,加入cin.ignore(100, '\n');这行代码的作用就是将输入"hello"过后按下的回车给忽略掉。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-8 00:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表