C++语言兼容C语言中的基本语句语法。scanf和printf是C语言中的输入输出函数(语句),在C++语言环境中也可以使用。
"f"是format(格式)之意,就是要按照指定的格式输入输出值,所以,又称为格式输入输出函数。
对于大数据的输入输出,使用scanf和printf,比C++中的输入输出流语句(cin和cout)效率更高、速度更快。
scanf和printf是标准库的函数,使用前需要加上<cstdio>头文件。
1#printf函数printf函数的格式为:printf(格式控制字符串,输出列表);
格式控制字符列表
格式字符说明%d以十进制形式输出带符号整数,正号不输出%o以八进制形式输出无符号整数,不输出前缀0%x,%X以十六进制形式输出无符号整数,不输出前缀0x%u以十进制形式输出无符号整数%c以字符形式输出一个字符%s输出字符串%f,%lf以小数形式输出单、双精度浮点数,隐含输出6位小数e,%E以指数形式输出实数%l加在格式符d、o、x、u前,用于长整型数据使用说明:
1)输出整数形式可以用%d或%md,m为指定的输出字符的宽度,输出数据右对齐。
2)输出长整型可以用%ld,一个int型数据可以用%d或%ld格式输出。
3)输出字符串用%s,如printf("%s", "hello");。
4)%ms,输出的字符串占m列,如字符串本身长度大于m,则突破m的限制,将字符串全部输出;若串的长度小于m,则左补空格。
5) “%-ms”,若串长小于 m,则在 m 列范围内,字符串向左靠,右补空格。
6) “%m.ns”,输出占 m 列,但只取字符串中左端 n 个字符。这 n 个字符输出在 m 列的右侧,左补空格。
7) “%-m.ns”,m、n 含义同上,n 个字符输出在 m 列范围的左侧,右补空格,如果 n>m,则 m自动取 n 值,即保证 n 个字符正常输出。
8) “%m.nf”,输出浮点数,占 m 列,其中有 n 位小数,如果数值长度小于 m,则左补空格。
9) “%-m.nf”,同上,只是使输出的数值向左端靠齐,右端补空格。
示例,上机实验:
//p2-10-1#include<cstdio>using namespace std;int main(){ printf( “ %d ” ,1); // 输出 1 printf( “ %o ” ,8); // 输出 10 printf( “ %x ” ,17); // 输出 11 printf( “ %u ” ,12); // 输出 12 printf( “ %c ” ,49); // 输出 1 printf( “ %s ” , ” 1ab11 ” ); // 输出 1ab11 printf( “ %f ” ,0.14); // 输出 0.140000 printf( “ %e ” ,0.1); // 输出 1.000000e-001 printf( “ %lld ” ,21473648); // 输出 21473648} 2#scanf函数scanf 函数的格式为:
scanf(格式控制字符串 , 地址表列);
scanf 的作用是输入指定形式的数据。其中,地址列表可以是变量的地址,也可以是字符串的首地址。
例如:int a,b;
scanf(“%d,%d”,&a,&b);
就表示先在内存中各开辟4个字节空间给a和b,当遇到scanf语句时,就把键盘上输入的2个数依次存入a、b所在的空间(及地址中)。“&a”就表示取a变量的地址,“&”称为取地址符。简而言之,就是先找地址后放值。
使用scanf函数时,需要注意以下几个问题:
(1)如果在格式控制字符串中有其它字符,则运行程序输入数据时,对应的位置也要输入这些相同的字符。
例如:scanf(“%d,%d”,&a,&b);
键盘输入应该是“3,4”,而不能是“3 4”。
(2)scanf函数输入时可以过滤掉不想读入的字符。
例如:scanf(“%d+%d+%d”,&a,&b,&c);
键盘输入:1+2+3
则scanf可以无视“+”,使得a,b,c的值分别为1,2,3。
再如:scanf(“%3d %*3d %2d”,&m,&n);
键盘输入:113 118 69
则m,n的值分别为113,69,因为“*”表示跳过相应数据。
#include <cstdio>#include <string>using namespace std;int main(){ int a; double b; long c; char d; char s[101]; scanf("%d", &a); scanf("%f", &b); scanf("%d", &c); scanf("%c", &d); scanf("%s", &s); return 0;} 3#scanf、printf 与 cin、cout 的比较cin 是输入流,cout 是输出流,重载了“>>”“<<”运算符,包含在头文件 中。
cin 代表标准输入设备,使用提取运算符“>>”从键盘取得数据,送到输入流对象 cin 中,然后送到内存。cin 是自动判断变量类型,比如一个 char 数据只能用默认的 char 方法取数据。
cout 先把要输出的东西存入缓冲区,遇到“endl”或者“return 0”再输出并刷新缓冲区,导致效率降低。
scanf 是格式化输入,printf 是格式化输出,包含在头文件 中。因为scanf是用指针操作的,没有类型安全机制,比如对于一个char类型数据,你就可以用“%f”获得输入,而不会报错,但在运行时会出现异常。scanf()函数取数据时遇到回车、空格、TAB就会停止。
printf输出效率比较高,但是编写代码相对而言麻烦一些。
4#练习利用scanf输入三角形三边,计算三角形面积,并用printf输出,结果保留两位小数。如不能构成三角形,则输入 “No” 。
输入样例
3 4 5
输出样例
6.00
#include<cmath>#include<cstdio>using namespace std;float a,b,c;double p,s;int main(){ scanf("%f%f%f",&a,&b,&c); if( a + b > c && a + c > b && b + c > a ) { p = (a+b+c)/2; s = sqrt(p*(p-a)*(p-b)*(p-c)); printf("%.2fn",s);}else printf("No"); return 0;}