文章目录
1.前言:
你会输出一个双引号吗?如何输入一行带空格的字符串?每个题我们都要用到输入输出,尤其在在输入字符串的时候,我们要对各个函数的截停条件要了解。
2.cin
cin可以连续从键盘读取想要的数据,以空格、tab或换行作为分隔符。当cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。不管是读数字还是读字符串都是适用的
缺点:cin的输入较慢,其输入数据达到20万以上时非常明显,在100万时cin读入就会超时。我们直接用scanf代替即可。主要和缓冲区有关,也有让cin加速的方法,不过还是比不过scanf,主要是懒得记了~~~
3.getline()
getline()是一个面向行的函数。用来完成一行数据的读入,以enter或者指定数目的字符结束读入
这个一般我们都是在读入带空格的字符串的时候才用
用法一:
读入整行,遇到回车结束
string s;
getline(cin,s);
用法二:
cin.getline(字符数组名,接收长度,结束符)
char name[256];
cin.getline(name, 256,'*');
4. gets
gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取。但换行符会被丢弃,然后在末尾添加’\0’字符。
5.getchar()
读入一个字符,以enter结束。getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾(End-Of-File)则返回-1(EOF),且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在缓冲区。它可以单独使用,不像上面的必须要读进一个变量中
6.scanf
6.1输入整行字符串
用%[^\n]表示读到换行符停下
scanf("%[^\n]",&str);
6.2输入带空格或者其他字符的数据
比如我们要输入三个数,数之间以空格分隔
scanf("%d%d%d",&a,&b,&c); //%d之间并不用带空格
假如以,分隔,
scanf("%d,%d,%d",&a,&b,&c); //%d之间也要带上,
比如我们要读入日期:2024-5-31
scanf("%d-%d-%d",&a,&b,&c);
6.3输入带空格的字符串
输入:
a b c
代码:
#include<iostream>
using namespace std;
int main()
{
char a,b,c;
// cin>>a>>b>>c;
scanf("%c %c %c",&a,&b,&c);
cout<<a<<' '<<b<<' '<<c<<endl;
return 0;
}
如果%c之间不加空格就会把空格读进去,但是cin就不会,cin会刷新缓冲区
7.printf
7.1 输出精度
精度格式符以“.”开头,后跟十进制整数。
比如:保留两位小数:
printf("%.2lf",a);
7.2宽度限制
printf("%06d",1000);输出:001000 //意思是不足6位在前面补0
8.转义字符
用处:cout/scanf 在输出时候都有"“那么三个”""就报错了,转义字符就是干这个的。
8.1输出双引号
cout<<"\"";
8.2输出单\
cout<<"\\";
9.关于endl
“\n” 表示内容为一个回车符的字符串。std::endl 是流操作子,输出的作用和输出 “\n” 类似,但也有区别。
std::endl 输出一个换行符,并调用 flush 函数,立即刷新缓冲区。
由于流操作符 << 的重载,对于 ‘\n’ 和 “\n”,输出效果相同。
因此\n的效率更快,(还真遇到过输出endl过多超时的题,不过题目找不到了~)
因此有时你会看到有的人的代码里会有这行:
#define endl '\n'