前言
C/C 输入输出很多,在不同的情况会用不同的输入输出,有的题目在输入时可能换一种输入输出就能不会TLE,有的输入可能要循环输入,但是可以换一种输入直接就能把所有数据输入进去。C/C 有哪些常用的输入输出,在什么时候用它们,这篇博客我会一一详解。
输入
一、cin
cin是C 的输入,是C 里面最常用的一种输入。既可以输入数字,也可以输入字符、字符串。注意,cin输入字符串时,当遇到空格、回车、Tab都会结束。当需要输入空格时,那要用什么,后面会讲解。当输入空格字符时,cin不会把空格读入进去。
代码语言:javascript复制#include<iostream>
#include<cstring>
using namespace std;
int n;
string s;
char a,b,c;
int main(){
cin>>n;
cin>>s;
cin>>a>>b>>c;
cout<<"数字为:"<<n<<endl;
cout<<"字符串为"<<s<<endl;
cout<<"字符为"<<a<<" "<<b<<" "<<c<<endl;
return 0;
}
二、scanf
用于从标准输入读取格式化的输入,例如整数、浮点数、字符串等,sacnf是C语言的输入,但是广泛应用于C 程序里面,这是因为C语言的scanf比C 的cin快3~4倍,这是因为scanf是用指针操作的,没有类型的安全机制,比如char类型scanf可以用%f输入,而不会报错,但是运行时会出现异常。cin是自动判断你的变量类型,比如char类型,他会用默认的char方法(%c)取数据。这就会影响的效率。
scanf遇到空格、Tab、回车都会结束输入。
当我们看别人程序时前面会出现一行代码,可以用这两行代码实现scanf与cin同步,时间几乎是一样的。
代码语言:javascript复制ios::sync_with_stdio(false);
cin.tie(0);
scanf在输入时,就比较个体化了,不同的类型都有不同的输入表示。
代码语言:javascript复制#include<iostream>
#include<cstring>
using namespace std;
int n1;
float n2;
double n3;
char ch[100],a,b;
int main(){
scanf("=%f%lf",&n1,&n2,&n3);//=接受三位数字
scanf("%s",ch);//不接受空格、Tab、回车
scanf("%c%c",&a,&b);
printf("数字为:%d %.3f %.2fn",n1,n2,n3);//%f自动转成%lf
printf("字符数组为:%sn",ch);//ch.c_str()
printf("字符为:%c %cn",a,b);//%c可以吃空格
return 0;
}
注:在C语言中,scanf函数可以用于字符数组,但是在C 中,scanf函数不能直接用于string类。因为string是C 中的一个类,而scanf函数是C语言的函数,并不支持C 的类类型。
三、gets
gets() 函数的功能是从输入缓冲区中读取一行字符串存储到字符指针变量 str 所指向的内存空间。可以接受空格、Tab,但是不接受回车。
代码语言:javascript复制#include<iostream>
#include<cstring>
using namespace std;
int n1;
float n2;
double n3;
char ch[100],a,b;
int main(){
gets(ch);
printf("%s",ch);
return 0;
}
四、getchar
getchar()用于从标准输入流获取一个字符。getchar()函数每次从输入流中读取一个字符,并返回该字符的ASCII码值(整数类型)。读取的字符可以是任意可打印字符、控制字符或特殊字符。常用于吃掉回车。
使用getchar()函数时,程序会等待用户从键盘输入一个字符,然后按下回车键确认。之后,函数会将输入的字符返回给程序,并继续执行后续的代码。
代码语言:javascript复制#include <stdio.h>
int main() {
int c;
printf("请输入一个字符:");
c = getchar();
printf("n你输入的字符是:");
putchar(c);
return 0;
}
五、fgets
fgets用于从文件流中读取一行字符串。它的原型如下:
代码语言:javascript复制char *fgets(char *str, int n, FILE *stream);
参数说明: - str:用于存储读取字符串的缓冲区的地址。 - n:读取字符的最大数量(包括终止符'