Linux-C基础之输入输出函数

一,输出

(一)数据输出

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(“格式控制串”,输出表)(使用范围最广)
功能:按指定格式向显示器输出数据
输出表:要输出的数据
格式控制串:包含两种信息
格式说明:%[修饰符]格式字符,用于指定输出格式
普通字符:原样输出
字符:
Linux-C基础之输入输出函数_第1张图片
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(“%%”); //%

(六)附加格式说明符

Linux-C基础之输入输出函数_第2张图片
·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);

Linux-C基础之输入输出函数_第3张图片

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支持的格式字符很多,如下:
Linux-C基础之输入输出函数_第4张图片
scanf函数支持的格式说明符可以带以下修饰符
Linux-C基础之输入输出函数_第5张图片

  • l 对于long而言指定为整数,不看小数。
    double而言,制定为实数
    号是输出时,将用户输入的有部分数据扔掉。

例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,puts配对用)

字符串输入函数gets
格式: char * gets(char *s)
功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’
说明1:输入串长度应小于字符数组维数
说明2:与scanf函数不同,gets函数并不以空格作为字符串输入结束的标志。
字符串默认只能输入十个,但是只要是字符串最后就会有一个\0
所以老师演示时字符串长度控制为5
gets以\0结尾,scanf以空格、回车、teb结尾。
Linux-C基础之输入输出函数_第6张图片
这个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(“”);

五,数据输入输出综合示例——~/practice/level1/day3/inout.c

从键盘输入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;
}

输入一行字符,原样打出:
Linux-C基础之输入输出函数_第7张图片
只要不遇到换行就一直打印!

你可能感兴趣的:(学习笔记)