#include<iostream> //头文件
using namespace std;
int main(){
int a=3; //整型
float b=3.12345678; //单精度浮点型
double c=3.12345678;//双精度浮点型
char d='y'; //字符型
scanf("%d",&a);//注意:输入时变量前必须加&(取地址符)
printf("%d\n",a);
printf("%f\n",b);
printf("%lf\n",c);
printf("%c\n",d);
return 0;
}
之前主要学习了cin和cout输入输出,也可以使用scanf( )输入、printf( )输出。基本数据类型的scanf、printf格式如下:
数据类型 | 格式符 | 举例 |
int | %d | scanf(“%d”, &n); //输入 printf (“%d”,n); //输出 |
long long | %lld | scanf(“%lld”, &n); printf(“%lld”, n); |
float | %f | scanf(“%f”, &f); printf( “%f”, f ); //默认保留6位小数 |
double | %lf | scanf(“%lf”, &d); printf( “%lf”, d ); //用%f输出是一样的 |
char | %c | scanf(“%c\n”, &c); //’\n’表示回车换行 printf( “%c\n”, c ); |
char数组 | %s | scanf(“%s”, str); //如char str[100]=”hello”; printf(“%s”, str); char数组也就是字符串,第六单元重点讲到。 |
%g | float输出时,去除小数尾0 | |
%lg | double输出时,去除小数尾0 |
特别提醒:初学者特别容易在写scanf时漏写&,因此如果在输入数据后程序异常退出,或输出很奇怪的内容,要马上考虑是否在scanf中漏写了&。
所有输出的变量均可包含在一个字符串中:
#include<cstdio>
using namespace std;
int main(){
int a=3;
float b=3.12345678;
double c=3.12345678;
char d='y';
scanf("%d%f",&a,&b); //输入a、b,中间空格,%d和%f中间可省略空格
//双引号里面是整个输出,%d,%f,%lf,%c分别为变量a,b,c,d占了个位置
printf("int a=%d, float b=%f, double c=%lf, char d=%c.",a,b,c,d);
int hh,mm,ss;
//双引号里面是整个输入,只不过把数据换成换成对应的格式符而已
scanf("%d:%d:%d",&hh,&mm,&ss);
return 0;
}
scanf的返回值:scanf的返回值是正确读取变量的个数。
对于scanf(“%d %d”, &a, &b);
如果输入1 2,正确读入两个变量,返回2。
如果输出1 -或- 1,正确读入1个变量,返回1。
注意:如果用%d读入字母,无法正确读入,输入流中会一直有该字母的信息,需要对输入流做清空后,再进行后面的输入。
getchar和putchar 在某些其他函数使用不便的场合可以用getchar输入字符。
char c1,c2;
c1=getchar();
getchar(); //中间有字符是不要的,多的,可以这么写
c2=getchar();
putchar(c1);
putchar(c2);

float, double等输出保留若干位小数时用:%.4f, %7lf
#include<cstdio>
using namespace std;
int main(){
float b=3.12345678;
double c=3.12345678;
//下面分别保留4位小数,7位小数输出
printf("float b=%.4f, double c=%.7lf",b,c);
return 0;
}
最小数字宽度:%8.3f, 表示这个浮点数的最小宽度为8,保留3位小数,当宽度不足时在前面补空格。
#include<cstdio>
using namespace std;
int main(){
int a=3;
float b=3.12345678;
double c=3.12345678;
printf("int a=%4d, float b=%8.3f, double c=%6.7lf",a,b,c);
return 0;
}
%-8.3f,表示最小宽度为8,保留3位小数,当宽度不足时在后面补上空格
#include<cstdio>
using namespace std;
int main(){
int a=3;
float b=3.12345678;
double c=3.12345678;
printf("int a=%-4d, float b=%-8.3f, double c=%-6.7lf",a,b,c);
return 0;
}
%08.3f, 表示最小宽度为8,保留3位小数,当宽度不足时在前面补上0
#include<cstdio>
using namespace std;
int main(){
int a=3;
float b=3.12345678;
double c=3.12345678;
printf("int a=%04d, float b=%08.3f, double c=%06.7lf",a,b,c);
return 0;
}
cin、cout与scanf、printf性能比较
在竞赛中,经常出现数据集超大造成TLE(运行超时)的情况。这时候大部分人认为这是cin的效率不及scanf,甚至还上升到C语言和C++语言的执行效率层面的争论。其实,这是C++为了兼容而采取的保守措施。
可以在IO之前将stdio解除绑定,这样做了之后要特别注意:不要同时混用cout和printf 之类。
在默认情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。
#include <iostream>
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
// 加上上面两句以后,再使用cin、cout与scanf、printf性能差不太多
// 下面再写我们的代码
int a;
cin>>a;
cout<<a<<'\n'; //换行用\n,不要用endl
... ...
}