C/C++的几个输入流

C:1.scanf( )

存在于<stdio.h>(C++为<cstdio>)中,根据stdin读取数据并根据参数格式进行赋值,以第一个非空格字符(空格字符如:空格,制符表,换行符)为起点。一般键盘输入时,返回成功赋值的参数的个数如:0(失败),1(成功赋值一个),2,...

开始&结束标志:  常见的数值赋值、单个字符赋值时,以第一个非空格字符为开始标志,以空格字符为结束标志。但是以换行符为键盘缓冲区结束标志(整数、字符、字符串都会出现下图情况)。所以使用"%s"进行字符串赋值时,无法赋值空格字符。

 

                  附,格式说明:

常见的格式化单元符[td]

i

整数

d/u

十进制整数(u是无符号数)

o

八进制整数

x

十六进制整数

f

浮点数(似乎是所有进制的,如16进制浮点数前面加 '0x')

e

e指数形式的浮点数

g

g自动选择合适的类型

c

字符

s

字符串

p

指针地址

常见的几种 格式&类型[td]

%hd、%hu

short int、unsigned short int

%d、%u

int、unsigned int

%ld、%lu

long int、unsigned long int

%lld、%llu

long long int、unsigned long long int、

%f

float

%lf

double

%Lf

long double

%c

char

%s

char *  /  char[ ]

 

 

2.getchar( )

存在于<stdio.h>中,返回读取的字符的ASCII码,返回类型为int。(一个字符一个字符地读取)

一般情况下getchar( )会开启输入(如:键盘)缓冲区,并且该缓冲区以换行符为结束。但是此时getchar( )只读取了一个字符,导致换行符还存在于缓冲区内。

第一次输入“A”+“回车”;//可以明显地看到b=“回车”;

第二次输入“YYY”+“回车”

第三次输入“EEE”+“回车”

综上,无delim,不丢弃任何字符,一次读一个字符,包括空格符、制表符、换行符。

如图:(第16行while的条件用来去除缓冲区中的“换行符”)


3.gets(char * str)

存在于<stdio.h>中,原型为char * gets ( char * str ),返回str。

以换行符为结束标志,将所有字符(包括空格)赋值给字符数组,并丢弃delim

目前来看只能进行 字符数组 的赋值,如图


C++:4.std::getline(istream& is, string& str, char delim)

           原型:

istream& getline (istream& is, string& str, char delim);

istream& getline (istream&& is, string& str, char delim);

istream& getline (istream& is, string& str);

istream& getline (istream&& is, string& str);

存在于<string>中,可以认为是gets( )的string版,返回str,并丢弃delim。

输入流必须指定,默认情况下终结符为“换行符”(“\n”)。


5.std::istream::getline(char* s, streamsize n, char delim)

存在于<istream> <iostream>中,可以认为是gets( ),返回istream该对象的指针,并丢弃delim。

原型:

istream& getline (char* s, streamsize n );

istream& getline (char* s, streamsize n, char delim );

 

6.std::istream::get()

存在于<istream> <iostream>中,可以认为是gets( ),因为重载函数比较多。返回istream该对象的指针,不丢弃delim。

原型

 

int get();

istream& get (char& c);

istream& get (char* s, streamsize n);

istream& get (char* s, streamsize n, char delim);

istream& get (streambuf& sb);

istream& get (streambuf& sb, char delim);

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值