**
Day3输入输出专题
**
C语言没有I/O语句,I/O操作由函数实现
#include <stdio.h>
1.字符输出函数putchar( )
格式:putchar©
参数:C为字符常量、变量或表达式
功能:把字符c输出到显示器上
反值:正常,为显示的代码值
例:
int c ;char a ;c = 65 ;a = ‘b’ ;
putchar(c);putchar(‘\n’);putchar(a);
显示结果为:
A
B
2.格式输出函数printf
格式:printf(“格式控制串”,输出表);
功能:按指定格式向显示器输出数据
输出表:要输出的数据
格式字符串:包含两种信息
1)格式说明:%[修饰符]格式字符,用于指定输出格式。
2)普通字符:原样输出。
2.1. 格式字符
例:
int a = 567 ; printf(“%d”,a) ; //567
int a = 255 ; printf(“%x”,a) ; //ff
int a = 65 ; printf(“%o”,a) ; //101
int a = 567 ; printf(“%u”,a) ; //567
char a = 65 ; printf(“%c”,a) ; //A
printf(“%s”,”ABC”) ; //ABC
float a = 567.789 ; printf(“%e”,a) ; //5.677890e+02
float a = 567.789 ; printf(“%f”,a) ; //567.789000
float a = 567.789 ; printf(“%g”,a) ; //567.789
printf(“%%”) ; //%
2.2附加格式说明符
例:m.n
int a = 1234 ; float f = 123.456 ; char ch = ‘a’ ;
printf(“%8d,%2d\n”,a,a) ;
printf(“%f,%8f,%8.1f,%.2f\n”,f,f,f,f) ;
printf(“%3c\n”,ch) ;
运行结果:
1234,1234
123.456, 123.456, 123.4,123.45
a
例:
static char a[] = “Hello,world!”
printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a) ;
运行结果:
Hello,world!
Hello,world!
Hello
Hello
Hel
例:0,+
int a = 1234 ; float f = 123.456 ;
printf(“%08d\n”,a) ;
printf(“%010.2f\n”,f) ;
printf(“%0+8d\n”,a) ;
printf(“%0+10.2f\n”,f) ;
运行结果:
00001234
0000123.45
+0001234
+000123.45
3.字符输入函数getchar( )
格式:getchar( )
功能:从键盘读入一个字符
反值:正常,返回读取的代码值,出错或结束键盘输入返回-1(ctrl d)
例:
int c ;
printf(“Enter a character : A\n”) ;
c = getchar( ) ;
printf(“%c--%d-->%#x\n”,c,c,c) ;
运行结果:
Enter a character : A
A--65-->0x41
4.格式输入函数
格式:scanf(“格式控制串”,地址表);
功能:按指定格式从键盘读入数据,存入地址表指定存储单元中,并按回车键借宿。
反值:正常,返回输入数据个数
地址表:变量的地址,常用取地址运算符”&”
4.1. 格式字符
4.2. 格式说明符
例:
scanf(“%4d%2d%2d”,&yy,&mm,&dd) ;
若输入为:19991015
则yy为1999,mm为10,dd为15
例:
scanf(“%2d*3d%2d”,&a,&b) ;
若输入为1234567
则a为12,b为67
4.3. 说明
1)用“%c”格式符时,空格和转义字符作为有效字符输入。
例:
scanf(“%c%c%c”,&c1,&c2,&c3) ;
若输入为a b c
则c1为a,c2为空格,c3为b
2)输入字符串时,不需要用取地址运算符“&”。
4.4. 总结
输入数据时,遇到以下几种情况认为该数据结束
- 遇空格、TAB、回车
- 遇非法输入
- 遇宽度结束
例:
scanf(“%d%c%f”,&a,&b,&c) ;
若输入为1234a123o.26
则a为1234,b为‘a’,c为123
5.输入函数留下“垃圾”
输入整数之后遗留的回车或空格成为垃圾符号,影响了下一字符的输入。
例:
int x ; char ch ;
scanf(“%d”,&x) ;
scanf(“%c”,&ch) ;
printf(“x = %d,ch = %d\n”,x,ch) ;
若输入为5回车4
则结果为5,10
方法一:用getchar()清除
int x ; char ch ;
scanf(“%d”,&x) ;
getchar( ) ;
ch = getchar( ) ;
printf(“x = %d,ch = %d\n”,x,ch) ;
方法二:用格式字符串中空格或“%*c”来“吃掉”
int x ; char ch ;
scanf(“%d”,&x) ;
scanf(“ %c”,&ch) ;或scanf(“%*c%c”,&ch) ;
6.字符串输入函数gets
格式:char * gets(char * s)
功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动添加‘\0’
说明一:输入串长度应小于字符数组位数
说明二:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志,而scanf函数会将空格看作结束标志。
例:
char string[15] ;
printf(“Input a string : ”) ;
gets(string) ;
printf(“%s\n”,string) ;
7.字符串输出函数puts
格式:int puts (const char *s) ;
功能:向显示器输出字符串(输出完换行)
说明:字符数组必须以‘\0’结束
例:
char string[80] = “How are you” ;
puts(string) ;
8.数据输入输出综合示例
从键盘输入a、b、c的值求一元二次方程ax^2+b=0的根。