前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用cin进行输入

使用cin进行输入

作者头像
艰默
发布2023-02-26 11:00:08
1.1K0
发布2023-02-26 11:00:08
举报
文章被收录于专栏:iDoitnow

1. istream的类方法

常用的istream的类方法有:

  • 方法get(char&)get(void)提供不跳过空白的单字符输入功能;
  • 函数get(char*, int, char)getline(char*, int, char)在默认情况下读取整行而不是一个单词。

单字符输入

在使用char参数或没有参数的情况下,get()方法读取下一个输入字符,即使该字符是空格、制表符或换行符。

代码语言:javascript
复制
get(char & ch)------该版本将输入字符赋给其参数,并返回调用对象(cin)。
get(void)-----------该版本将输入字符转换为整型(通常是int),并将其返回。

两者的主要特性如下:

特征

cin.get(ch)

ch=cin.get()

传输输入字符的方法

赋给参数ch

将函数返回值赋给ch

字符输入时函数的返回值

指向istream对象的引用

字符编码(int值)

达到文件尾时函数的返回值

转换为false

EOF

字符串输入

getline()成员函数和get()的字符串读取版本都读取字符串,它们的函数特征标相同(这是从更为通用的模板声明简化而来的):

代码语言:javascript
复制
istream & get(char *, int, char);
istream & get(char *, int);
istream & getline(char *, int, char);
istream & getline(char *, int);

:第一个参数是用于放置输入字符串的内存单元的地址。第二个参数比要读取的最大字符数大1(额外的一个字符用于存储结尾的空字符,以便将输入存储为一个字符串)。第3个参数指定用作分界符的字符,只有两个参数的版本将换行符用作分界符。上述函数都在读取最大数目的字符或遇到换行符后为止】

例如:

代码语言:javascript
复制
char line[50];
cin.get(line, 50);//cin.get( )函数将在到达第49个字符或遇到换行符(默认情况)后停止将输入读取到数组中

get()getline()之间的主要区别在于,get()将换行符留在输入流中,这样接下来的输入操作首先看到的将是换行符,而getline()抽取并丢弃输入流中的换行符。】

如何忽略字符串中某些内容呢?C++为我们提供了ignore( )函数,该函数的原型如下:

代码语言:javascript
复制
//第一个参数是一个数字,指定要读取忽略的最大字符数,默认为1
//第二个参数是一个字符,用作输入的分界符,默认为EOF
istream & ignore(int = 1, int = EOF);

//eg:
if (ch != '\n') cin.ignore(255, '\n');  //可以用来忽略上次输入流中残余的字符串

2. 其他istream方法

除前面讨论过的外,其他istream方法包括read()peek()gcount()putback()

函数

功能描述

read()

读取指定数目的字节,并将它们存储在指定的位置中。与getline()和get()不同的是,read()不会在输入后加上空值字符。read()方法不是专为键盘输入设计的,它最常与ostream write()函数结合使用,来完成文件输入和输出。该方法的返回类型为istream &,因此可以像getline()一样拼接使用。

peek()

返回输入中的下一个字符,但不抽取输入流中的字符。也就是说,它使得能够查看下一个字符。假设要读取输入,直到遇到换行符或句点,则可以用peek()查看输入流中的下一个字符,以此来判断是否继续读取。

gcount()

返回最后一个非格式化抽取方法读取的字符数。这意味着字符是由get()、getline()、ignore()或read()方法读取的,不是由抽取运算符(>>)读取的,抽取运算符对输入进行格式化,使之与特定的数据类型匹配。

putback()

将一个字符插入到输入字符串中,被插入的字符将是下一条输入语句读取的第一个字符。putback()方法接受一个char参数——要插入的字符,其返回类型为istream &,这使得可以将该函数调用与其他istream方法拼接起来。

其使用方法如下:

代码语言:javascript
复制
//read()
char read_arr[100];
cin.read(read_arr, 100);//其返回值类型为istream &,可以这样拼接使用:cin.read(read_arr, 10).read(read_arr + 10, 90);

//peek()
char input[100];
int i = 0;
while(cin.peek() != '.')
    cin.get(input[i++]);
input[i]='\0';

//gcount()
char arr[20]; 
istringstream stream("abc"); 
stream.read(arr, sizeof arr); 
auto count = stream.gcount();//count = 3

//putback()
char c;
int n;
char str[256];
cout << "Enter a number or a word: ";
c = cin.get();
if ((c >= '0') && (c <= '9')) {
    cin.putback(c);
    cin >> n;
    cout << "You have entered number " << n << endl;
} else {
    cin.putback(c);
    cin >> str;
    cout << " You have entered word " << str << endl;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iDoitnow 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. istream的类方法
  • 2. 其他istream方法
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档