一、C语言的标准输入输出
(一)输出
- putchar:输出一个字符。
- printf:格式化输出。使用时需要包含头文件#include <stdio.h>。
- printf的使用:printf(“格式控制字符串”,…);
示例:
peintf(“a = %d\n”,a);
“a = %d\n"中"a = “属于普通字符,原样输出,”%d"格式控制占位符,”\n"表示转义字符,表示换行输出。
- 格式控制符:%开头,%后可跟数据类型符,附加修饰符
- 数据类型符:
- 附加修饰符:位置再%和类型符中间。
#:在八进制或十六进制时,输出前导符0或0x
.n:n表示显示小数时,小数后保留的位数,四舍五入。
m:m表示显示时,若实际宽度不足m个字符,填充空格,数据默认右对齐;若实际宽度超过m个字符,以实际宽度输出。
-:对齐方式,使用左对齐,通常跟m一起使用。
+:显示有符号数的符号,
#include <stdio.h>
int main()
{
printf("Hello World!\n");
int a = 20;
printf("%d\n",a);//%d占位符
printf("a = %d\n",a);
char c = 'x';
printf("%d\r\n",c);
printf("%c\n",c);
printf("%#x\r\n",a);
float f = 2.5718;
printf("f = %.1f\n",f);
printf("a = [%4d]\n",a);
printf("a = [%04d]\n",a);
printf("a = [%-04d]\n",a);
printf("f = [%4.1f]\n",f);
printf("f = [%-4.1f]\n",f);
printf("a = %d, c = %c, f = %f\n",a,c,f);
//下列情况会出现隐式类型转换,非常危险
printf("a = %d, c = %c, f = %f\n",f,c,a);
return 0;
}
(二)输入
- getchar():从终端获取一个字符输入。
- scanf():格式化输入。
- 输入中,若有连续多个输入,则scanf()以空格,回车,制表符作为分隔
- 输入中,指定输入格式:
- 输入整数时%d,若输入的格式不是整数,不是数字开头,直接退出,scnaf函数中的后续输入都会终止。
- 不是数字结尾,且不是指定的分隔符,将字母前的数字,作为第一个输入,scanf函数中的后续输入都会终止。
- %d输入时分隔符不能是数字。
- %d指定输入数据长度。
- %*6d表示6个数字抠掉不用存储。不可以抠掉小数点,%*6f可以抠掉小数点。
- 查找提取:
- 匹配指定的字符集合:%[指定字符集]
- 匹配指定的字符集合意外的字符:%*[^指定字符集]
“%d,%d,%d”——>输入的3个数以”,"作为分隔符。
#include <stdio.h>
int main()
{
//从终端获取一个整数,放到变量a中
int a;
printf("请输入一个整数:\n");
scanf("%d",&a);
printf("a = %d\n",a);
//输入时间
int h,m,s;
printf("请输入时分秒:\n");
scanf("%d%d%d",&h,&m,&s);
printf("%2d%2d%2d\n",h,m,s);
//从终端获取一个浮点数
float f;
printf("请输入一个浮点数:\n");
scanf("%f",&f);
//从终端输入字符串
char name[20];
printf("请输入你的名字:\n");
scanf("%s",name);//name为数组,相当于地址
printf("name = %s\n",name);
return 0;
}
练习:
#include <stdio.h>
int main()
{
//输入身份证号,提取出生年月日
int year,month,day;
printf("请输入身份证:\n");
//scanf("%6d%4d%2d%2d",&year,&year,&month,&day);
scanf("%*6d%4d%2d%2d",&year,&month,&day);
printf("%4d年%02d月%02d日\n",year,month,day);
//提取电话号码:单间配套,电话:19754272583
char str[30];
printf("请输入:\n");
scanf("%*[^0123456789]%[0123456789]",str);
return 0;
}