按字符输入输出
按字符输出putchar()
格式
#include <stdio.h> int putchar(int c);
功能:向终端输出一个字符
参数:要输出的字符的ASCII码值
返回值:
成功,返回输出字符的ASCII码值
失败,返回EOF(end of file)
用法
char c='b'; int a=10; putchar(66); putchar('A'+32); putchar(c); putchar(a); putchar('\n');
以上代码输出结果为:ABab
按字符输入getchar()
格式
#include <stdio.h> getchar(int c);
功能:从终端输入一个字符串
参数:无
返回值:
成功,返回输入字符串的ASCII码
到达文件末尾或失败,返回EOF
用法
int c=getchar(); //变量c里面存放了输入字符的ASCII码值 putchar(c);
以上代码输出结果:变量c输入的字符
如果连续按字符输入输出两次,第一次输入的回车会被第二次的getchar()接收。
#include <stdio.h> #include <stdlib.h> int main(int argc,char const *argv[]) {int c=getchar();putchar(c);int m=getchar();putchar(m);return 0; }
注意:
后面多余的字符会放在输入缓冲区中等待输入(即下一个putchar会输出),如果后面遇见输出功能的函数会完成输出,也就是我们敲的回车键也会放到输入缓冲区内等待输入。字符是排队等待输入的,如果要解决这个问题可以在后面跟一个getchar()。
按格式输入输出
按格式输出printf()
格式
#include <stdio.h> int printf(const char * format,...);
功能:按照指定格式向终端输出
参数:format:用双引号括起来的格式控制串和输出表
返回值:输出字符的个数
用法
printf("格式控制串",输出表);
格式控制串:包含两种信息
- 普通字符:按原样输出
- 格式说明:修饰符%后面加格式字符,用于指定输出格式
输出表:要输出的数据,可以没有数据;当有多个数据时用 “ ,” 分隔
int a=10,b=20; printf("a=%d b=%d\n",a,b);
以上输出结果为:10 20
按格式输入scanf()
格式
#include <stdio.h> int scanf(const char * format,...);
功能:按格式从终端输入
参数:format:用双引号括起来的格式控制串和输入表
返回值:
成功,返回正确输入数据的个数
当有第一个输入的数据格式不正确时,直接返回0
用法
scanf("格式控制串",地址表);
格式控制串:包含两种信息
- 普通字符:按原样输出
- 格式说明:修饰符%后面加格式字符,用于指定输出格式
地址表:变量的地址,常用取地址运算符&
int a,b; scanf("%d%d",&a,&b); printf("%d %d\n",a,b);
以上输出结果:输出a和b的值
注意:
scanf输入时要原样输入,如果用scanf时格式控制串中写了除格式控制字符以外的东西时要原样输入才行。
输入分隔符的指定
scanf输入时,一般用空格、Tab键或者回车键作为分隔符;其他字符做分隔符时,需要在格式控制串中两个格式字符间输入。
例如:
输入 “12 34” 或者输入 “12回车34”
int a,b; scanf("%d%d",&a,&b); printf("%d %d\n",a,b);
例如:
输入 “12,34”
要输入的两个字符中间用逗号隔开,输入的时候要原样带着逗号
int a,b; scanf("%d,%d",&a,&b); printf("%d %d\n",a,b);
练习:
一个水分子的质量约为3.0*10^-23g,1夸脱水大概有950g,当输入水的夸脱数后,显示这些水中包含多少水分子,数据表示:3.0e-23,打印数据的格式:%f或%e
#include <stdio.h> #include <stdlib.h>int main() {int kua;scanf("%d",&kua);printf("%e\n",kua*950/3.0e-23);return 0; }
注意:
scanf()函数输入回车符的问题:
当用到%c输入字符串时,如果下个数据还是char类型,那么回车符会被下次的%c接收到,但是其他格式不会出现这种问题。
例如:
连续输入两个char类型的字符:
char a,b; scanf("%c",&a); prinft("%c",a); scanf("%c",&b); printf("%c",b);
如果a后面用回车获取值,那么第二个scanf会读到回车。
例如:
连续输入两个int类型的数据:
int a,b; scanf("%d",&a); printf("%d",a); scanf("%d",&b); printf("%d",b);
两次输入的字符都是int类型的,因此下次输入不会读到char类型的回车。
例如:
先输入int类型的数据,再输入char类型的数据
int a; char b; scanf("%d",&a); printf("%d\n",a); scanf("%c",&b); printf("%c\n",b);
第二次输入会直接读到回车
综上例子,只要第一次输入后用回车结束,第二次输入的是char类型,不处理回车的话就会接收上一次的回车然后输出。
垃圾字符回收
回收空格、回车和tab
通过空格可以回收一个或多个空格、回车和tab。
char a,b;
scanf("%c",&a);
printf("%c",a);
scanf("%c",&b);
printf("%c\n",b);
回收任意字符
%*c
用%*c能够回收任意一个字符。
char a,b;
scanf("%c",&a);
printf("%c",a);
scanf("%*c%c",&b);
printf("%c\n",b);
getchar()
用getchar()能够回收任意一个字符。
char a,b;
scanf("%c",&a);
printf("%c",a);
getchar();
scanf("%c",&b);
printf("%c\n",b);
格式字符
格式字符 | 类型格式或含义 |
%d | int类型 |
%ld | long类型 |
%f | float类型 |
%lf | double类型 |
%c | char类型 |
%s | 字符串 |
%x | 十六进制数据 |
%o | 八进制数据 |
%e | 指数型数据 |
%p | 该数据的存放地址 |
%u | 十进制无符号整数 |
%m.nf | n:打印小数点后几位 m:位宽 |
%-数据类型 | 左对齐(默认是右对齐) |
%0数据类型 | 用0自动填充不适用的空位置 |
int a=123; float b=12.345; char c='a'; printf("%2d,%8d,%8d,%-8d\n",a,a,a,a); printf("%f,%3f,%8.2f,%.2f\n",b,b,b,b); printf("%c,%3c,%-3c\n",c,c,c);
以上输出结果为: