• C++中几种输入输出cin、cin.getline()、getline()、sscanf()、sprintf()、gets()等


    1.cin和cout

    cout是输出流对象的名字,cin是输入流对象的名字 ,“<<”是流插入运算符(也可称流插入操作符〉,作用是将需要输出的内容插入到输出流中,默认的输出设备是显示器。 “>>”是流提取运算符,作用是从默认的输入设备(一般为键盘〉的输入流中提取若干字节送到计算机内存区中指定的变量。需要头文件iostream

    cout语句的一般格式为

    cout<<表达式1<<表达式2<<...<<表达式n;
    cin>>变量1>>变量2>>...>>变量n;
    

    执行cout语句时,并不是输入-个数据马上输出一个数据,而是先把插入的数据顺序在放在输出缓冲区中.直到输出缓冲区满或遇到cout语句中的endl(或’\n’ ,endl)为止,此时将输出缓冲区已有数据输出并清空输出缓冲区。

    cin以空格、tab键地、换行做为数据问分隔符。接受一个字符串,遇“空格”、“TAB”、“回车”都结束

    char c1,c2;int a;float b;
    cin>>c1>>c2>>a>>b;当输入1234  56.78,则输出1  2  34  56.78
    系统会自动判别输出类型。
    int a=3;float b=4.21;char=’a’;
    cout<<a<<’ ’<<b<<’ ‘<<c<<endl;
    cin的返回值:当成功提取数据返回非0即true,当失败或文件结束返回0。常用于while(cin>>a){}
    关于cin和scanf,cout和printf的区别和特点请参考一本通中P37内容。前面已经学习了C语言又不是很熟悉cin用法的尽量使用scanf和printf,在处理string类型时使用cin
    2.getline接受一个字符串,可以接收空格
    cin.getline(字符数组(或字符指针),字符个数n,终止标志字符)
    char ch[20];
    cin.getline(ch,20);   //读取19个字符或遇’
    ’结束
    cin.getline(ch,20,’’); //读取19个字符或遇’’结束
    string ch;       //声明字符串类型
    getline(cin,ch);  //接受一个string字符串,可以接收空格。读取不限长度字符串到ch。注意上下两种用法的不同
    

      

    string类型和字符串数组的异同

    string s;

    char str[10];

    string

    字符串数组

    定义具体长度

    不需要

    需要

    s=”Hello!”;

    可直接赋值

    不能,要用strcpy(str1,str2)

    以’’为结束符

    只存放字符串本身,不包括’’

    直接用==,>,<,>=,!=进行比较

    可以

    不可以,要用函数

    存储多组字符串

    string s[3]={“jk”,”jkl”,”fds”};

    str[3][20]={“jk”,”jkl”,”fds”};

     1 #include<iostream>
     2 //#include<string> //忘记了打也可以在windows的dev cpp通过 ,要考虑到考场上可能不行 
     3 #include<cstring>
     4 using namespace std;
     5 int main()
     6 {
     7     string str;
     8     char c[20];
     9     cin>>str;
    10     cin>>c;
    11     if(str=="ok")            //因str是string类型,可以直接使用=,==,<等 
    12         cout<<"yes"<<endl;
    13     else cout<<"no"<<endl;
    14     if(c=="ok")            //这种写法错误 ,因为c是字符数组,字符数组不是一等公民 
    15     //if(!strcmp(c,"ok"))
    16         cout<<"yes"<<endl;
    17     else cout<<"no"<<endl;
    18         
    19     return 0;
    20 }
    21 /*
    22 由于字符串的本质是数组,它也不是“一等公民”,只能用strcpy(a,b)、strcmp(a,b)、strcat(a,b)来
    23 执行“赋值”、“比较”和“连接”操作。而不能用=、==、<=、+等运算符。上述函数都在string.h中声明。
    24 */

    3.sprintf函数

    sprintf是个变参函数,定义如下:

    int sprintf( char *buffer, const char *format [, argument] ... );

    此函数的功能是把格式化的数据写入某个字符串,它的返回值是字符串长度。包含此函数的头文件是stdio.h。

    例如,本程序中的sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z);语句的功能是将整数abcdexyx打印成字符串存储在串buff中。

    sprintf函数、printf函数、fprintf函数的区别:

    printf输出到屏幕,fprintf输出到文件,而sprintf输出到字符串。需要注意是应该保证写入的字符串有足够的空间。

    4.sscanf函数

    (1)sscanf()表示从一个字符串中读取与指定格式相符的数据。它的函数原型如下:

    int sscanf( const char *, const char *, …)

    需要的头文件是stdio.h。

    (2)sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

    如果有一个格式为HH:MM:SS的字符串s(例如,"12:34:56"),用一条sscanf语句得到HH、MM、SS的值如下:

    sscanf(s,"%d:%d:%",&HH,&MM,&SS);

    将s替换成"12:34:56",可以得到HH的值为12,MM的值为34,SS的值为56。

    C++中还有一种“字符串流”,可以实现类似sscanf和sprintf的功能:

     1 #include <cstdio>
     2 #include <sstream>
     3 using namespace std;
     4 #define MAXN 100010
     5 int main()
     6 {
     7     char s[1000];
     8     cin.getline(s, 1000, '
    ');
     9     stringstream  ss(s);
    10     int a, b;
    11     ss >> a >> b;
    12     count << a+b << "
    ";
    13     return 0;
    14 }

    上面的函数先从cin读取一行。Getline函数的第3个参数是行分隔符。它的默认值就是' ',因此可以简化为cin.getline(s,1000),其中1000的含义和fgets中的类似。

    /*读入两个整数,中间用空格隔开,输出他们的和*/

     1 #include <cstdio>
     2 #include <sstream>
     3 #include <iostream>
     4 #include<string>
     5 using namespace std;
     6 #define MAXN 100010
     7 int main()
     8 {
     9     char s[1000];
    10     cin.getline(s,1000,'
    ');
    11     //string s;getline(cin,s); //用这句功能类似 
    12     stringstream  ss(s);
    13     int a,b;
    14     ss>>a>>b;  //类似sscanf(s,"%d%d",&a,&b);
    15     cout << a+b << "
    ";
    16     return 0;
    17 }

    5.gets

    gets用法gets(s),s是字符数组名,返回值是字符数组起始地址,可以不停往s中存内容不管能不能存下。

    6.关于空格的输入输出

    输入字符:          
    char ch;
    cin>>ch //只能输入非空格非回车字符
    scanf("%c",&ch);//可以输入任意字符
    ch = getchar();//可以输入任意字符
    输出字符:
    cout<<ch;//输出一个字符
    printf("%c",ch);//输出一个字符
    putchar(ch);//输出一个字符
    输入字符串: 
    char buf[100];
    cin>>buf;//输入字符串,以空格、回车结束
    gets(buf);//输入一个字符串,可以包含空格,以回车结束,结尾加''                   cin.getline(buf,100)//输入一个字符串,可以包含空格,以回车结束,清除结束符
    getline(cin,buf)//输入一个字符串,可以包含空格,以回车结束,清除结束符
    输出:
    cout<<buf;//输出字符串
    canf("%s",buf);//输出字符串
    puts(buf);//向屏幕输出字符串,并换行
    

      

  • 相关阅读:
    testNG 注解使用说明
    jenkins 生成HTML报表,邮件推送
    Jenkins 邮件发送
    Jenkins+SVN+Maven+testNG管理项目
    SVN 安装教程
    大数据笔记(十一)——倒排索引
    大数据笔记(十)——Shuffle与MapReduce编程案例(A)
    大数据笔记(九)——Mapreduce的高级特性(B)
    大数据笔记(八)——Mapreduce的高级特性(A)
    大数据笔记(七)——Mapreduce程序的开发
  • 原文地址:https://www.cnblogs.com/jchm/p/5466473.html
Copyright © 2020-2023  润新知