C/C++常见输入输出总结

C/C++常见输入输出总结

scanf函数

函数原型:

int scanf(const char * restrict format,...);

函数 scanf() 是从标准输入流stdin (标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。scanf是C语言标准库函数,定义于头文件 <stdio.h>
函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。

返回值:

scanf函数返回成功读入的数据项数,读入数据时遇到了错误或者“文件结束”(Ctrl+z 或者Ctrl+d)则返回EOF。

  1. 分隔符问题

    当不指定分隔符时,如:

    scanf("%d%d%d%d%d",&a, &b, &c, &d, &e);
    

    每个输入之间默认用space、tab、enter分隔。

    当指定分隔符时候,如:

    scanf("%d,%d,%d,%d,%d", &a, &b, &c, &d, &e)
    

    每个输入之间就必须按照指定的分隔符进行分割,分隔符可以是任意字符。

    scanf会严格按照程序编写者的要求和用户的输入来解析输入流中的数据,在上面的例子中,scanf的参数是要求他读取整形数字,所以在读取到数字字符的时候会保存并继续读取,而读取到非数字字符时,便会停止读取,并将这个字符放到输入流中,等待下一次读取。

  2. 参数问题

    占位符由一下三个部分构成:

    • 一个可选的最大字段宽度,用一个正的十进制整数表示。
    • 一个可选的长度指定符。
    • 必须的转换操作。

    具体如下表所示:

    转换操作长度指定符参数类型
    dhhchar *
    dhshort int *
    dint *
    dllong *
    dlllong long *
    uhhunsigned char *
    uhunsigned short int *
    uunsigned int *
    ulunsigned long *
    ullunsigned long long *
    ffloat *
    fldouble *
    fLlong double *
    cchar *(单字符)
    schar *(字符串)

    除了输入字符串时,其他情况都需要加&,因为传入地址,字符数组名本身就是首地址,所以不用加&。

    tips:

    %s输入字符串时会以space、tab、enter为分割,故不能输入带上述字符的字符串,除了用gets之外,可以用下面的方式输入:

    scanf("%[^\n]", str);
    

    %[]。这个参数的意义是读入一个字符集合。[]是个集合的标志,因此%[]特指读入此集合所限定的那些字符, 比如 %[A-Z] 是输入大写字母,一旦遇到不在此集合的字符便停止。

    scanf("%[A-Z]", str);
    

    如果集合的第一个字符是’^‘, 这说明读取不在’^‘后面集合的字符,即遇到’^'后面集合的字符便停止。而此时读入的字符串是可以含有空格的。

printf函数

函数原型:

int printf( const char *restrict format, ... );

printf 是指格式化输出函数,主要功能是向标准输出设备按规定格式输出信息。printf 是C语言标准库函数,定义于头文件 <stdio.h>。输出的字符串除了可以是字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。参数类型需和前面的说明符一一对应。

返回值:

如果函数执行成功,则返回所打印的字符总数,如果函数执行失败,则返回一个负数。

  1. 说明符问题:

    对应关系如下表:

    说明符说明
    %d十进制整数,按照数据的实际长度输出。
    %md十进制整数,m指定输出字段的宽度(整数),如果数据位数小于m,则左端补以空格(右对齐),否则按照实际位数输出。
    %-md十进制整数,m指定输出字段的宽度(整数),如果数据位数小于m,则右端补以空格(左对齐),否则按照实际位数输出。
    %ld十进制整数,输出长整型数据
    %ld十进制整数,m指定输出字段的宽度(整数),如果数据位数小于m,则左端补以空格(右对齐),否则按照实际位数输出。
    %-ld十进制整数,m指定输出字段的宽度(整数),如果数据位数小于m,则右端补以空格(左对齐),否则按照实际位数输出。
    %o以八进制形式输出整数,是将内存单元中的各位的值按八进制形式输出,输出的数据不带符号,即将符号位也一起作为八进制的一部分输出。
    %x以十六进制形式输出整数,是将内存单元中的各位的值按十六进制形式输出,输出的数据不带符号,即将符号位也一起作为十六进制的一部分输出。
    %s字符串
    %ms输出的字符串占m列,如果字符串长度大于m,则字符串全部输出;若字符串长度小于m,则左补空格 (右对齐)。
    %-ms输出的字符串占m列,如果字符串长度大于m,则字符串全部输出;若字符串长度小于m,则右补空格 (左对齐)。
    %m.ns输出占m列,但只取字符串左端n个字符,左补空白 (右对齐)。
    %-m.ns输出占m列,但只取字符串左端n个字符,右补空白 (左对齐)。
    %f用来输出实数 (包括单、双精度,单双精度格式符相同),以小数形式输出。不指定宽度,使整数部分全部输出,并输出6位小数。注意,并非全部数字都是有效数字,单精度实数的有效位数一般为7位 (双精度16位)。
    %m.nf指定数据占m列,其中有n位小数。如果数值长度小于m,左端补空格(右对齐)。
    %-m.nf指定数据占m列,其中有n位小数。如果数值长度小于m,右端补空格(左对齐)。
    %e不指定输出数据所占的宽度和小数位数,由系统自动指定。如6位小数,指数占5位,-e占1位,指数符号占1位,指数占3位。数值按照规格化指数形式输出 (小数点前必须有而且只有1位非0数字)。

gets

从标准输入 stdin 读取一行,并把它存储在 str 所指向的字符串中。当读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定。

函数原型:

char *gets(char *str)

返回值:

如果成功,该函数返回 str。如果发生错误或者到达文件末尾时还未读取任何字符,则返回 NULL。

puts

把一个字符串写入到标准输出 stdout,换行符会被追加到输出中。

函数原型:

int puts(const char *str)

返回值:

如果成功,该函数返回一个非负值为字符串长度(包括末尾的 \0),如果发生错误则返回 EOF。

getchar

从标准输入 stdin 读取下一个可用的字符。

函数原型:

int getchar(void)

返回值:

读入一个字符,返回其ascii码值(整数)。

putchar

把一个字符写入到标准输出 stdout。

int putchar(int c) 

返回值:

返回相同的字符的ascii码值(整数)。

cin

C++中标准的输入流对象,可以完成数据的输入,默认的分隔符为space,tab,enter。

当输入字符串时,如果字符串中包含空格。那么可以使用下面的操作进行输入:

getline(cin, str);

如果输入流中采用别的分隔符进行分隔,可以使用一个变量来接受这个分隔符,如:

cin>>a>>sep>>b;

cin本身是一个对象,不存在返回值的概念,但是使用cin>>时,因为发生了重载,其返回值为istream&类型,大多数情况下返回值为非零值,只有当遇到EOF时返回0;

cout

C++中标准的输出流对象,可以完成数据的输出。

  1. 指定进制输出

    cout << dec << i;//十进制
    cout << oct << i;//八进制
    cout << hex << i;//十六进制
    cout << setbase(n) << i;//指定以n进制输出
    
  2. 控制数字位数输出

    cout << setprecision(n) << i << endl;//以n位有效数字输出i,如果整数部分位数大于n,则以科学计数法的方式输出
    cout << fixed << setprecision(n) <<i << endl;//小数部分以n位有效数字输出。
    
  3. 强制显示小数点和正负号

    cout << showpoint << i << endl;//显示小数点
    cout << showpos << i << endl;//显示正负号
    
  4. 设置宽度和对齐方式

    cout << setw(n) << i << endl;//宽度为n
    cout << left << i << endl;//左对齐
    cout << right << i << endl;//右对齐
    
  5. 上述操作需要包含iomanip库,其它一些操作如下

    控制符作用
    setbase(n)以n进制方式输出(n=8,10,16)
    setfill(ch)设置字符填充,ch可以是字符常量或字符变量
    setprecision(n)设置输出有效位数为n位
    setw(n)设置字符宽度为n位,只对后一个有影响
    setiosflags(ios::uppercase)以大写字母显示
    setiosflags(ios::fixed)实现对小数点后的数字的控制
    setiosflags(ios::scientific)以科学计数法显示
    setiosflags(ios::showpoint)强制显示小数点
    setiosflags(ios::showpos)强制显示正号
    setiosflags(ios::left)设置输出左对齐
    setiosflags(ios::right)设置输出右对齐
    resetiosflags(…)终止括号中的输出格式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值