C语言无I/O语句,I/O操作由函数实现
#include
格式: putchar( c )
参数: c为字符常量、变量或表达式,要是int值。
c也可以是字符常量,“\n”。
c是将字符的ASCII码值作为参数的。
功能:把字符c输出到显示器上,就是输出c的ASCII码值。
返值:正常,为显示的代码值;只输出一个字符
例子,——~/practice/level1/day3/putchar.c
#include
main()
{ int c;
char a;
c=65; a='B';
putchar(c); putchar('\n'); putchar(a);
}
运算结果为:A(A的ASCII码值为65,所以putchar(65)=输出A)
B
格式:printf(“格式控制串”,输出表)(使用范围最广)
功能:按指定格式向显示器输出数据
输出表:要输出的数据
格式控制串:包含两种信息
格式说明:%[修饰符]格式字符,用于指定输出格式
普通字符:原样输出
字符:
p 地址
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
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(“%%”); //%
·m:通常使用m来是的输出的记过整齐。
:实际数据位数小于m则在左侧补空格,反之按实际输出。
·n:对于字符串实际输出位数从左往右数。
例 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); 这里的8.1就是m.n
printf(“%3c\n”,ch);
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);
字符输入函数getchar
-格式: getchar( )
-功能:从键盘读一字符
-返值:正常,返回读取的代码值;出错或结束键盘输入,返回-1 (ctrl d:结束输入)
例
#include
int main()
{ int c; //因为字符型太小,只到127,unsigned char 无符号,返回值-1无法显示
printf("Enter a character:");
c=getchar();
printf("%c--%d->hex%x\n", c, c, c);
}
运行结果:
Enter a character:A
A--65->hex41
格式输入函数scanf,与printf相似。
-格式: scanf(“格式控制串”(这里不可以加\n),地址表)
-功能:按指定格式从键盘读入数据,存入地址表指定
-存储单元中,并按回车键结束
-返值:正常,返回输入数据个数
-地址表:变量的地址,常用取地址运算符&
int ch;
printf(">"); ——打印>
scanf("%x",&ch);——输入十六进制数ch,ch就为输入数的存储地址
printf("%d\n",ch);——输出ch的十进制数
目前,scanf支持的格式字符很多,如下:
scanf函数支持的格式说明符可以带以下修饰符
例1
scanf(“%4d%2d%2d”,&yy,&mm,&dd);
(4d中的4即为m修饰符。制定输入数宽度)
若输入19991015, (虽然没有空格,但是上一行4,2,2已经制定了输入宽度)
则yy为1999, mm为10, dd为15
例 2
scanf(“%2d%*3d%2d”,&a,&b);
若输入1234567
则a为12,b为67
说明:
用“%c”格式符时,空格和转义字符作为有效字符输入
例子
scanf(“%c%c%c”,&c1,&c2,&c3);
若输入abc
则c1为a, c2为空格, c3为b
总结,输入数据时,遇以下情况认为该数据结束:
1,遇空格、TAB、或回车
2,遇非法输入
3,遇宽度结束
例子,
ret=scanf(“%d%c%f”,&a,&b,&c);
若输入1234a123o.26
则a为1234, b为‘a’, c为123
使用输入以下函数可能会留下垃圾
int x;
char ch;
scanf(“%d”,&x);
scanf(“%c”,&ch);
printf(“x=%d,ch=%d\n”,x,ch);
清除方法:
方法1:用getchar()清除
int x;
char ch;
scanf(“%d”,&x);
getchar();
ch=getchar();
printf(“x=%d, ch=%d\n”, x, ch);
方法2:用格式串中空格或“%*c”来“吃掉”
int x;
char ch;
scanf(“%d”,&x);
scanf(“ %c”,&ch);或 scanf(“%*c%c”,&ch);
当scanf整形转字符型时,必定多出回车,一定要处理。
字符串输入函数gets
格式: char * gets(char *s)
功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’
说明1:输入串长度应小于字符数组维数
说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志。
字符串默认只能输入十个,但是只要是字符串最后就会有一个\0
所以老师演示时字符串长度控制为5
gets以\0结尾,scanf以空格、回车、teb结尾。
这个gets(s),可以用scanf(“%s”,s)代替。
区别:
1,gets可以输入多个,不受空格影响;
2,scanf,用%s,则遇空格结束。
若用%c来将空格带入,则需要用循环来制定字符串长度,否则无法打印全部。
举例如下
int main( )
{ char string[15];
printf(“Input a string:”);
gets(string);
printf(“%s\n”, string);
return 0;
}
字符串输出函数puts
格式:int puts(const char *s)
功能:向显示器输出字符串(输出完自动换行)
说明:字符数组必须以‘\0’结束
举例如下
#include
int main( )
{ char string[80] = “How are you”;
puts(string);
return 0;
}
输入: How are you?
输出: How are you ?
1,printf(“\n”);
2, putchar(‘\n’);
3, puts(“”);
从键盘输入a、b、c的值,求一元二次方程 y = ax2+b的根,
计算公式如下:
#include
#include
int main(int argc, char *argv[])
{
float a,b,c,x1,x2;
double q;
printf("input a b c:");
scanf("%f %f %f",&a,&b,&c);
//gets(a,b,c);
q = sqrt(b*b-4*a*c);
x1 = (-b+q)/(2*a);
x2 =( -b -q)/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);
return 0;
}