周六. 12 月 20th, 2025

【题目描述】

试编程使用cin语句输入3个大写字母,并将之转换为对应的小写字母输出。

【输入格式】

输入3个大写字母,字母间以一个空格间隔。

【输出格式】

输出3个对应的小写字母,字母间以一个空格间隔,行末无空格,有换行。

【输入样例】

A B C

【输出样例】

a b c

cin是C++编程语言中的标准输入流对象,即istream类的对象。cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕。

在理解cin功能时,不得不提标准输入缓冲区。当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7 ,而不是6。

cin读取数据也是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发cin的成员函数去读取数据。

cin的常用读取方法

使用cin从标准输入读取数据时,通常用到的方法有cin>>,cin.get,cin.getline。

cin>>的用法

cin可以连续从键盘读取想要的数据,以空格、tab或换行作为分隔符。实例程序如下。

#include <iostream> using namespace std; int main() { char a; int b; float c; string cin>>a>>b>>c; cout<<a<<” “<<b<<” “<<c<<” “<<endl; system(“pause”); return 0; }

注意:

(1)cin>>等价于cin.operator>>(),即调用成员函数operator>>()进行读取数据。

(2)当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。

(3)不想略过空白字符,那就使用 noskipws 流控制。比如cin>>noskipws>>input;

验证程序见如下:

#include <string> #include <iostream> using namespace std; int main() { char a; int b; float c; string str; cin>>a>>b>>c>>str; cout<<a<<” “<<b<<” “<<c<<” “<<str<<endl; string test; getline(cin,test);//不阻塞 cout<<“test:”<<test<<endl; system(“pause”); return 0; }

从键盘输入:[回车][回车][回车]a[回车]5[回车]2.33[回车]hello[回车],输出结果是:

从结果可以看出,cin>>对缓冲区中的第一个换行符视而不见,采取的措施是忽略清除,继续阻塞等待缓冲区有效数据的到来。但是,getline()读取数据时,并非像cin>>那样忽略第一个换行符,getline()发现cin的缓冲区中有一个残留的换行符,不阻塞请求键盘输入,直接读取,送入目标字符串后,再将换行符替换为空字符’\0’,因此程序中的test为空串。

cin.get的用法

该函数有有多种重载形式,分为四种格式:无参,一参数,二参数,三个参数。常用的的函数原型如下:

int cin.get(); istream& cin.get(char& var); istream& get ( char* s, streamsize n ); istream& get ( char* s, streamsize n, char delim )。 其中streamsize 在VC++中被定义为long long型。另外,还有两个重载形式不怎么使用,就不详述了,函数原型如下:

其中streamsize 在VC++中被定义为long long型。另外,还有两个重载形式不怎么使用,就不详述了,函数原型如下:

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

cin.get读取一个字符

读取一个字符,可以使用cin.get或者cin.get(var),示例代码如下:

#include <iostream> using namespace std; int main() { char a; char b; a=cin.get(); cin.get(b); cout<<a<<b<<endl; system(“pause”); return 0; }

输入:e[回车],输出:

注意:

(1)从结果可以看出,cin.get()从输入缓冲区读取单个字符时不忽略分隔符,直接将其读取,就出现了如上情况,将换行符读入变量b,输出时打印两次。

(2)cin.get()的返回值是int类型,成功:读取字符的ASCII码值,遇到文件结束符时,返回EOF,即-1,Windows下标准输入输入文件结束符为Ctrl+z,Linux为Ctrl+d。cin.get(char var)如果成功返回的是cin对象,因此可以支持链式操作,如cin.get(b).get(c)。

cin.get读取一行

读取一行可以使用istream& get ( char* s, streamsize n )或者istream& get ( char* s, size_t n, streamsize delim )。二者的区别是前者默认以换行符结束,后者可指定结束符。n表示目标空间的大小。示例代码如下:

#include <iostream> using namespace std; int main() { char a; char array[20]={NULL}; cin.get(array,20); cin.get(a); cout<<array<<” “<<(int)a<<endl; system(“pause”); return 0; }

cin.getline读取一行

函数作用:从标准输入设备键盘读取一串字符串,并以指定的结束符结束。

函数原型有两个:
istream& getline(char* s, streamsize count); //默认以换行符结束 istream& getline(char* s, streamsize count, char delim);

使用示例:

#include <iostream> using namespace std; int main() { char array[20]={NULL}; cin.getline(array,20); //或者指定结束符,使用下面一行 //cin.getline(array,20,\n); cout<<array<<endl; system(“pause”); return 0; }

注意,cin.getline与cin.get的区别是,cin.getline不会将结束符或者换行符残留在输入缓冲区中。

Avatar photo

作者 UU 13723417500

友情提示:现在网络诈骗很多,做跨境电商小心被骗。此号发布内容皆为转载自其它媒体或企业宣传文章,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。---无意冒犯,如有侵权请联系13723417500删除!

声明本文由该作者发布,如有侵权请联系删除。内容不代表本平台立场!

发表回复

服务平台
跨境人脉通
选品平台
U选Market
展会&沙龙
群通天下