zoukankan      html  css  js  c++  java
  • C/C++常见的输入函数总结

    众所周知,C++是在C上面延伸的,并引入面向对象的思想。
    今天我们不讨论面向对象思想,讨论一些简单的输入输出函数,
    C++很多输入输出函数也可以引用C语言的,所以这边我们做一个总结:

    输入函数

    1、cin

    • 最基本,也是最常用的方法,接收一个字符,整形或字符串
    • 遇到回车,TAB或空格结束
    #include <iostream>
    using namespace std;
    int main()
    {
    	char a[20];
    	cin >> a;
    	cout << a << endl;
    	return 0;
    }
    

    输入:jkljkljkl
    输出:jkljkljkl //遇回车结束
    输入:jkljkl jkljkl //遇空格结束
    输出:jkljkl

    2、cin.get()

    • 用法1:cin.get(字符变量名),可以用来接收单个字符
    #include <iostream>
    using namespace std;
    int main()
    {
    	char ch;
    	ch = cin.get();
    	//也可以这样
    	//cin.get(ch); 效果一样
    	cout << ch;
    	return 0;
    }
    

    输入:jljkljkl
    输出:j

    • 用法2:cin.get(字符数组名,接收字符的数目),可以用来接收一行字符串,可以包含空格
    #include <iostream>
    using namespace std;
    int main()
    {
    	char ch[20];
    	cin.get(ch,20);
    	cout << ch;
    	cout << endl;
    	return 0;
    }
    

    输入:jkl jkl jkl
    输出:jkl jkl jkl
    输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
    输出:abcdeabcdeabcdeabcd (接收19个字符+1个‘’)

    3、cin.getline()
    原型:cin.getline(字符指针(char*),字符个数N(int),结束符(char));
    cin.getline(字符指针(char*),字符个数N(int))

    • 接收一行字符串,可以包含空格,与cin.get()用法2效果一样
    • 主要适用于数组字符串,没有设置结束符默认以回车结束
    • cin.getline()属于istream流
    #include <iostream>
    using namespace std;
    int main()
    {
    	char ch[5];
    	cin.getline(ch, 5);
    	cout << ch;
    	cout << endl;
    	return 0;
    }
    

    输入:jkljkljkl
    输出:jklj
    接受5个字符到m中,其中最后一个为’’,所以只看到4个字符输出;
    如果把5改成20:
    输入:jkljkljkl
    输出:jkljkljkl
    输入:jklf fjlsjf fjsdklf
    输出:jklf fjlsjf fjsdklf

    4、getline()
    原型:istream& getline ( istream &is , string &str , char delim(结束符) );
    istream& getline ( istream &is , string &str );

    • 头文件:#include
    • 用法:可以接收空格并输出,和cin.getline()类似,但cin.getline()属于istream流,getline()属于string流
    • getline(cin,s)获取一行字符串。
    // getline with strings
    #include <iostream>
    #include <string>
    using namespace std;
    int main () {
      string str;
      cout << "Please enter full name: ";
      getline (cin,str);  //以回车为结束符
      cout << "Thank you, " << str << ".
    ";
    } 
    

    这里需要注意一个点:如果在getline(cin,str)前面输入了一个回车,则getline(cin,str)将不会被执行,因为这个回车会被当作按行读取的结束符,结束了getline(cin,str)的按行读取字符串,所以导致了getline(cin,str)没有读取任何字符串就结束了。解决这个问题的办法就是在回车后面加上cin.ignore();就会将回车键忽略掉,例子:

    // getline with strings
    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
    	string str;
    	int a;
    	cin >> a;
    	cin.ignore();
    	getline(cin, str);
    	cout << str << endl;
    	return 0;
    }
    

    geline()这个函数坑比较多,多补充几个知识点,如若我们要多次输入多行的字符串,并打印到窗口,怎么做呢?

    int main()
    {
    	string str;
    	while (getline(cin, str))
    	{
    		cout << str << endl;
    	}
    	return 0;
    }
    

    这样可以无休止的输入输出字符串,但是我们要这么结束这一切呢?
    只要输入Ctrl+z,即可退出循环,因为Ctrl+z是结束流的标志,而回车只是停止cin对流的读取操作,也可以自己指定字符停止流的读取操作,所以不要以为回车可以退出循环,而有些地方说到的EOF可以退出循环,我也不太清楚不知道是怎么做到的,这个函数的返回值是一个流的引用,而EOF:是end of file的缩写,是定义在<stdio.h>里面的一个宏定义#define EOF (-1),如果有大佬知道是怎么做到的告诉告诉小弟 。
    4、gets()
    原型:char * gets ( char * str );

    • 接受一个字符串,可以接收空格并输出,需包含“#include”
    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	char m[20];
    	gets(m);		//不能写成m=gets();
    	cout << m << endl;
    }
    

    输入:jkljkljkl
    输出:jkljkljkl
    输入:jkl jkl jkl
    输出:jkl jkl jkl

    5、getchar()
    原型:int getchar(void)

    • 接受一个字符,这个函数在标准C里面就有,在C++里也有,是getc()的宏定义
    #include<iostream>
    #include<string>
    using namespace std;
    int main ()
    {
    	char ch;
    	ch = getchar(); //不能写成getchar(ch);
    	cout<<ch<<endl;
    }
    

    输入:jkljkljkl
    输出:j
    C/C++毕竟是比较古老的东西,单单输入函数就有这么多种头大头大
    真的挺让人头大的,有写的不好的地方希望有大佬可以指教指教。
    常见的输出函数见下一篇吧。

  • 相关阅读:
    JVM堆内存设置和测试
    转:面试题:“你能不能谈谈,java GC是在什么时候,对什么东西,做了什么事情?”
    JVM--标记-清除算法Mark-Sweep
    JVM 垃圾回收器工作原理及使用实例介绍
    BSGS算法(大小步算法)
    Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)
    Codeforces Round #605 (Div. 3)
    POJ 2516Minimum Cost(最小费用流+特判)
    POJ 3155Hard Life(最大密度子图)
    洛谷P2463 [SDOI2008]Sandy的卡片(后缀数组SA + 差分 + 二分答案)
  • 原文地址:https://www.cnblogs.com/liuzeyu12a/p/12358983.html
Copyright © 2011-2022 走看看