C语言-004-输入输出语句printf、scanf、sscanf-2020-3-4
导语
C++语言功能非常强大,但是强大的代价是功能复杂、运行效率低。例如C++语言的标准输入输出流cin和cout使用非常方便,但在涉及大量数据输入输出时,由于需要花费时间自动判断输入输出数据的类型并转化为相应的格式输入输出,所以运行效率并不是最高。而这在算法竞赛中,编写的代码运行效率过低是致命的。因此对于某些题目,例如需要大量读写数据时,使用功能简单而直接C语言代码是个不错的选择。这是因为C++语言是由C语言拓展改进而来,C++支持C语言的几乎全部功能。
printf
printf函数(格式输出函数)可以向终端输出任意类型的多个数据。
prinf(格式控制,输出表列)
如
printf("%d,%c\n",i,c);//表示将变量以整数形式输出,变量c以字符形式输出,两变量间以逗号间隔。
print可用的格式字符表
格式字符 | 说明 |
---|---|
%d | 以十进制带符号形式输出整数 |
%o | 以八进制无符号形式输出整数 |
%x,%X | 以十六进制无符号形式输出整数 |
%u | 以十进制无符号形式输出整数 |
%c | 以字符形式输出,只能输出一个字符 |
%s | 输出字符串 |
%f | 以小数形式输出单,双精度数,隐含输出6位小数 |
%e,%E | 以指数形式输出实数 |
%l | 加在格式符d、o、x、u前,用于长整型数据 |
1.输出整数形式可以用%d或%md,m为指定的输出字符宽度,输出数据右对齐。
printf("a=%d,a=%4d",a,a);//若a=1,结果为a=1,a= 1。
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,则左端补空格。
%-m.nf与上例基本相同,只是使输出的数值向左端靠齐,右端补空格 。
scanf
scanf函数(格式输入函数)的作用是输入指定形式的数据。该函数的一般格式如下:
scanf(格式控制,地址表列)
”格式控制“的含义同printf函数;”地址表列“是由若干个地址组成的表列,可以是变量的地址,也可以是字符串的首地址。格式字符的使用与printf的格式字符使用方法类似,此处省略。
如
#include<stdio.h>
int main()
{
int a;
float b;
scanf("%d",&a);
scanf("%f",&b);
printf("%d,%f",a,b);
getchar();
getchar();
- &是C语言中的取地址符
- scanf函数需要键入&取地址符,printf函数不需要键入取地址符。
getchar()表示从键盘获得一个字符,常用于程序的暂停,但此程序使用了两句getchar命令,这是因为当使用了scanf()函数时,输入的数据最后需要按一下回车键以确定,该回车符恰好被第一个getchar()
函数所获取而导致程序提前结束,使屏幕一闪而过而看不清屏幕输出结果。
scanf("%3d %3d %2d",&m,&n);
//输入112 118 68
112,68分别赋值给m,n因为号表示跳过它相应的数据所以118不赋予任何变量。
sscanf
功能是从一个字符串中读进与指定格式相符的数据。
//sscanf的用法
//将读入的一整行字符串按空格,制表符或回车符分割成连个字符串。
#include<stdio.h>
int main()
{
char str[100],str1[100],str2[100];
gets(str);
sscanf(str,"%2s%s",str1,str2);
printf("%s | %s",str1,str2);
getchar ();
getchar ();
}
//输入hello
hello
he | llo
--------------------------------
Process exited with return value 0
Press any key to continue . . .