C语言低级讲座之输入输出
当前位置:以往代写 > C/C++ 教程 >C语言低级讲座之输入输出
2019-06-13

C语言低级讲座之输入输出

C语言低级讲座之输入输出

副标题#e#

数据输出语句

本小节先容的是向尺度输出设备显示器输出数据的语句。在C语言中,所有的数据输入/输出都是由库函数完成的。 因此都是函数语句。本小节先先容printf函数和putchar函数。printf函数printf函数称为名目输出函数,其要害字最末一个字母f即为“名目”(format)之意。其成果是按用户指定的名目, 把指定的数据显示到显示器屏幕上。在前面的例题中我们已多次利用过这个函数。

一、printf函数挪用的一般形式

printf函数是一个尺度库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在利用 printf 函数之前必需包括stdio.h文件。printf函数挪用的一般形式为: printf(“名目节制字符串”,输出表列)个中名目节制字符串用于指定输格外式。 名目节制串可由名目字符串和非名目字符串两种构成。名目字符串是以%开头的字符串,在%后头跟有各类名目字符,以说明输出数据的范例、形式、长度、小数位数等。如“%d”暗示按十进制整型输出,“%ld”暗示按十进制长整型输出,“%c”暗示按字符型输出等。后头将专门给以接头。

非名目字符串在输出时原样照印,在显示中起提示浸染。 输出表列中给出了各个输出项, 要求名目字符串和各输出项在数量和范例上应该一一对应。

void main()
{
int a=88,b=89;
printf("%d %d\n",a,b);
printf("%d,%d\n",a,b);
printf("%c,%c\n",a,b);
printf("a=%d,b=%d",a,b);
}
a<--8,b<--89
printf("%d %d\n",a,b);
printf("%d,%d\n",a,b);
printf("%c,%c\n",a,b);
printf("a=%d,b=%d",a,b);

本例中四次输出了a,b的值,但由于名目节制串差异,输出的功效也不沟通。第四行的输出语句名目节制串中,两名目串%d 之间加了一个空格(非名目字符),所以输出的a,b值之间有一个空格。第五行的printf语句名目节制串中插手的长短名目字符逗号, 因此输出的a,b值之间加了一个逗号。第六行的名目串要求按字符型输出 a,b值。第七行中为了提示输出功效又增加了非名目字符串。

二、名目字符串

在Turbo C中名目字符串的一般形式为: [符号][输出最小宽度][.精度][长度]范例 个中方括号[]中的项为可选项。各项的意义先容如下:

1.范例范例字符用以暗示输出数据的范例,其名目符和意义下表所示:

暗示输出范例的名目字符 名目字符意义

d 以十进制形式输出带标记整数(正数不输出标记)

o 以八进制形式输出无标记整数(不输出前缀O)

x 以十六进制形式输出无标记整数(不输出前缀OX)

u 以十进制形式输出无标记整数

f 以小数形式输出单、双精度实数

e 以指数形式输出单、双精度实数

g 以%f%e中较短的输出宽度输出单、双精度实数

c 输出单个字符

s 输出字符串

2.符号

符号字符为-、+、#、空格四种,其意义下表所示:

符号名目字符 标 志 意 义

- 功效左对齐,右边填空格

+ 输出标记(正号或负号)空格输出值为正时冠以空格,为负时冠以负号

# 对c,s,d,u类无影响;对o类, 在输出时加前缀。对x类,在输出时加前缀0x;对e,g,f 类当功效有小数时才给出小数点


#p#副标题#e#

3.输出最小宽度

用十进制整数来暗示输出的最少位数。 若实际位数多于界说的宽度,则按实际位数输出, 若实际位数少于界说的宽度则补以空格或0。

4.精度

精度名目符以“.”开头,后跟十进制整数。本项的意义是:假如输出数字,则暗示小数的位数;假如输出的是字符, 则暗示输出字符的个数;若实际位数大于所界说的精度数,则截去高出的部门。

5.长度

长度名目符为h,l两种,h暗示按短整型量输出,l暗示按长整型量输出。

void main(){
int a=15;
float b=138.3576278;
double c=35648256.3645687;
char d='p';
printf("a=%d,%5d,%o,%x\n",a,a,a,a);
printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);
printf("c=%lf,%f,%8.4lf\n",c,c,c);
printf("d=%c,%8c\n",d,d);
} a<--15
b<--138.3576278
c<--35648256.3645687
d<--'p' main()
{
int a=29;
float b=1243.2341;
double c=24212345.24232;
char c='h'
printf("a=%d,%5d,%o,%x\n",a,a,a,a);
printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);
printf("c=%lf,%f,%8.4lf\n",c,c,c);
printf("d=%c,%8c\n",d,d);
}

#p#分页标题#e#

本例第七行中以四种名目输出整型变量a的值,个中“%5d ”要求输出宽度为5,而a值为15只有两位故补三个空格。 第八行中以四种名目输出实型量b的值。个中“%f”和“%lf ”名目标输出沟通,说明“l”符对“f”范例无影响。“%5.4lf”指定输出宽度为5,精度为4,由于实际长度高出5故应该按实际位数输出,小数位数高出4位部门被截去。第九行输出双精度实数,“%8.4lf ”由于指定精度为4位故截去了高出4位的部门。第十行输出字符量d,个中“%bc ”指定输出宽度为8故在输出字符p之前补加7个空格。

利用printf函数时还要留意一个问题, 那就是输出表列中的求值顺序。差异的编译系统不必然沟通,可以从左到右, 也可从右到左。Turbo C是按从右到左举办的。如把例2.13改写如下述形式:

void main(){
    int i=8;
    printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i--,i++,-i--);
}
i<--8

这个措施与例2.13对比只是把多个printf语句改一个printf 语句输出。但从功效可以看出是差异的。为什么功效会差异呢?就是因为printf函数对输出表中各量求值的顺序是自右至左举办 的。在式中,先对最后一项“-i–”求值,功效为-8,然后i自减1后为7。 再对“-i++”项求值得-7,然后i自增1后为8。再对“i–”项求值得8,然后i再自减1后为7。再求“i++”项得7,然后I再自增1后为8。 再求“–i”项,i先自减1后输出,输出值为7。 最后才求输出表列中的第一项“++i”,此时i自增1后输出8。可是必需留意, 求值顺序虽是自右至左,可是输出顺序照旧从左至右, 因此获得的功效是上述输出功效。

#p#副标题#e#

字符输出函数

putchar 函数

putchar 函数是字符输出函数, 其成果是在显示器上输出单个字符。其一般形式为: putchar(字符变量) 譬喻:

putchar(‘A’); 输出大写字母A

putchar(x); 输出字符变量x的值

putchar(‘\n’); 换行 对节制字符则执行节制成果,不在屏幕上显示。 利用本函数前必需要用文件包括呼吁:

#include<stdio.h>
#include <stdio.h>
void main(){
    char a='B',b='o',c='k';
    putchar(a);putchar(b);putchar(b);putchar(c);putchar('\t');
    putchar(a);putchar(b);
    putchar('\n');
    putchar(b);putchar(c);
}

数据输入语句

C语言的数据输入也是由函数语句完成的。 本节先容从尺度输入设备—键盘上输入数据的函数scanf和getchar。 scanf函数 scanf函数称为名目输入函数,即按用户指定的名目从键盘上把数据输入到指定的变量之中。

一、scanf函数的一般形式

scanf函数是一个尺度库函数,它的函数原型在头文件“stdio.h”中,与printf函数沟通,C语言也答允在利用scanf函数之前不必包括stdio.h文件。scanf函数的一般形式为: scanf(“名目节制字符串”,地点表列); 个中,名目节制字符串的浸染与printf函数沟通,但不能显示非名目字符串, 也就是不能显示提示字符串。地点表列中给出各变量的地点。 地点是由地点运算符“&”后跟变量名构成的。譬喻,&a,&b别离暗示变量a和变量b 的地点。这个地点就是编译系统在内存中给a,b变量分派的地点。在C语言中,利用了地点这个观念,这是与其它语言差异的。 应该把变量的值和变量的地点这两个差异的观念区别开来。变量的地点是C编译系统分派的,用户不必体贴详细的地点是几多。

变量的地点和变量值的干系如下: &a—>a567 a为变量名,567是变量的值,&a是变量a的地点。在赋值表达式中给变量赋值,如: a=567 在赋值号左边是变量名,不能写地点,而scanf函数在本质上也是给变量赋值,但要求写变量的地点,如&a。 这两者在形式上是差异的。&是一个取地点运算符,&a是一个表达式,其成果是求变量的地点。

void main(){
int a,b,c;
printf("input a,b,c\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
}

留意&的用法!

在本例中,由于scanf函数自己不能显示提示串,故先用printf语句在屏幕上输出提示,请用户输入a、b、c的值。执行scanf语句,则退出TC屏幕进入用户屏幕期待用户输入。用户输入7、8、9后按下回车键,此时,系统又将返回TC屏幕。在scanf语句的名目串中由于没有非名目字符在“%d%d%d”之间作输入时的隔断, 因此在输入时要用一个以上的空格或回车键作为每两个输入数之间的隔断。

如: 7 8 9

或 

7

8

9

#p#副标题#e#

名目字符串

名目字符串的一般形式为: %[*][输入数据宽度][长度]范例 个中有方括号[]的项为任选项。各项的意义如下:

1.范例

暗示输入数据的范例,其名目符和意义下表所示。

名目 字符意义 

d 输入十进制整数

o 输入八进制整数

x 输入十六进制整数

u 输入无标记十进制整数

f或e 输入实型数(用小数形式或指数形式)

c 输入单个字符

s 输入字符串

2.“*”符

#p#分页标题#e#

用以暗示该输入项读入后不赋予相应的变量,即跳过该输入值。 如 scanf("%d %*d %d",&a,&b);当输入为:1 2 3 时,把1赋予a,2被跳过,3赋予b。

3.宽度

用十进制整数指定输入的宽度(即字符数)。譬喻: scanf("%5d",&a);

输入:

12345678

只把12345赋予变量a,其余部门被截去。又如: scanf("%4d%4d",&a,&b);

输入:

12345678将把1234赋予a,而把5678赋予b。

4.长度

长度名目符为l和h,l暗示输入长整型数据(如%ld) 和双精度浮点数(如%lf)。h暗示输入短整型数据。

利用scanf函数还必需留意以下几点:

a. scanf函数中没有精度节制,如: scanf("%5.2f",&a); 是犯科的。不能诡计用此语句输入小数为2位的实数。

b. scanf中要求给出变量地点,如给出变量名则会堕落。如 scanf("%d",a);是犯科的,应改为scnaf("%d",&a);才是正当的。

c. 在输入多个数值数据时,若名目节制串中没有非名目字符作输入数据之间的隔断则可用空格,TAB或回车作隔断。C编译在遇到空格,TAB,回车或犯科数据(如对“%d”输入“12A”时,A即为犯科数据)时即认为该数据竣事。

d. 在输入字符数据时,若名目节制串中无非名目字符,则认为所有输入的字符均为有效字符。譬喻:

scanf("%c%c%c",&a,&b,&c);

输入为:

d e f

则把’d’赋予a, ‘f’赋予b,’e’赋予c。只有当输入为:

def

时,才气把’d’赋于a,’e’赋予b,’f’赋予c。 假如在名目节制中插手空格作为隔断,如 scanf ("%c %c %c",&a,&b,&c);则输入时各数据之间可加空格。

void main(){
char a,b;
printf("input character a,b\n");
scanf("%c%c",&a,&b);
printf("%c%c\n",a,b);
}
scanf("'C14F14%c%c",&a,&b);
printf("%c%c\n",a,b);

#p#副标题#e#

由于scanf函数"%c%c"中没有空格,输入M N,功效输出只有M。

而输入改为MN时则可输出MN两字符,见下面的输入运行环境:

input character a,b

MN

MN

void main(){
char a,b;
printf("input character a,b\n");
scanf("%c %c",&a,&b);
printf("\n%c%c\n",a,b);
}
scanf("%c %c",&a,&b); 

本例暗示scanf名目节制串"%c %c"之间有空格时, 输入的数据之间可以有空格隔断。e. 假如名目节制串中有非名目字符则输入时也要输入该非名目字符。

譬喻:

scanf("%d,%d,%d",&a,&b,&c); 其顶用非名目符“ , ”作隔断符,故输入时应为: 5,6,7

又如: scanf("a=%d,b=%d,c=%d",&a,&b,&c);

则输入应为

a=5,b=6,c=7g. 如输入的数据与输出的范例纷歧致时,固然编译可以或许通过,但功效将不正确。

void main(){
int a;
printf("input a number\n");
scanf("%d",&a);
printf("%ld",a);
}

由于输入数据范例为整型, 而输出语句的名目串中说明为长整型,因此输出功效和输入数据不符。如窜改措施如下:

void main(){
long a;
printf("input a long integer\n");
scanf("%ld",&a);
printf("%ld",a);
}

运行功效为:

input a long integer

1234567890

1234567890 当输入数据改为长整型后,输入输出数据相等。

键盘输入函数

getchar函数getchar函数的成果是从键盘上输入一个字符。其一般形式为: getchar(); 凡是把输入的字符赋予一个字符变量,组成赋值语句,如:

char c;
c=getchar();#include<stdio.h>
void main(){
char c;
printf("input a character\n");
c=getchar();
putchar(c);
}

#p#副标题#e#

利用getchar函数还应留意几个问题:

1.getchar函数只能接管单个字符,输入数字也按字符处理惩罚。输入多于一个字符时,只吸收第一个字符。

2.利用本函数前必需包括文件“stdio.h”。

3.在TC屏幕下运行含本函数措施时,将退出TC 屏幕进入用户屏幕期待用户输入。输入完毕再返回TC屏幕。

#p#分页标题#e#

void main(){
char a,b,c;
printf("input character a,b,c\n");
scanf("%c %c %c",&a,&b,&c);
printf("%d,%d,%d\n%c,%c,%c\n",a,b,c,a-32,b-32,c-32);
}

输入三个小写字母

输出其ASCII码和对应的大写字母。

void main(){
int a;
long b;
float f;
double d;
char c;
printf("%d,%d,%d,%d,%d",sizeof(a),sizeof(b),sizeof(f)
,sizeof(d),sizeof(c));
}

输出各类数据范例的字节长度。

    关键字:

在线提交作业