首页 理论教育C语言程序设计第2版-输入函数

C语言程序设计第2版-输入函数

【摘要】:表1.4scanf()附加说明字符注意:“*”符:用以表示该输入项读入后不赋予相应的变量,即跳过该输入值。例1.4输入输出数据类型控制。现将改动程序如下:则运行结果为:input a long integer12345678901234567890当输入数据改为长整型后,输入输出数据相同。

1.格式化输入函数scanf()

scanf() 函数称为格式化输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。

scanf() 函数的一般形式为:

scanf(“格式控制字符串”,地址列表);

其中,格式控制字符串的作用与printf() 函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址列表中给出各变量的地址。地址是由地址运算符 & 后跟变量名组成的。

和printf() 函数中的格式说明相似,以%A开头,以一个格式字符结束,中间可以插入附加的字符。表1.3列出了scanf() 函数用到的格式字符。

表1.3 scanf()格式字符

表1.4列出了输入函数scanf()可以用的附加说明字符(修饰符)。

表1.4 scanf()附加说明字符

注意:

(1)“*”符:用以表示该输入项读入后不赋予相应的变量,即跳过该输入值。

例如:

scanf("%d%*d%d",& a,& b);

当输入为1 2 3时,程序将把1赋予a,2被跳过,3赋予b。

(2)scanf函数中没有精度控制。例如,scanf("%5.2f",& a);是非法的,不能企图用此语句输入小数为2位的实数。

(3)scanf函数中要求给出变量地址,如果给出变量名则会出错。例如,scanf("%d",a);是非法的,应改为scanf("%d",& a);才是合法的。

(4)在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格、Tab或换行作间隔。C语言编译程序在碰到空格、Tab、换行或非法数据(如对“%d”输入“12A”时,“A”即为非法数据)时即认为该数据结束。

(5)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。

例如:

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

输入为:

d e f

则把’d’赋予a,’ ’赋予b,’e’赋予c。

只有当输入为:

def

时,才能把’d’赋予a,’e’赋予b,’f’赋予c。

如果在格式控制串中加入空格作为间隔,如:

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

则输入时各数据之间可加空格。

例1.3 无非格式字符的字符数据输入。

由于scanf函数“%c%c”中没有空格,若输入“M N”,结果输出只有“M”。而输入改为“MN”时则可输出“MN”两字符。

(6)如果格式控制串中有非格式字符,则输入时也要输入该非格式字符。(www.chuimin.cn)

例如:

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=7

(7)如果输入的数据与输出的类型不一致,虽然编译能够通过,但结果将不正确。

例1.4 输入输出数据类型控制。

由于输入数据类型为整型,而输出语句的格式串中说明为长整型,因此输出结果和输入数据不符。现将改动程序如下:

则运行结果为:

input a long integer

1234567890

1234567890

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

2.字符输入函数getchar()

getchar()函数的功能是从键盘上输入一个字符。其一般形式为:

getchar();

通常把输入的字符赋予一个字符变量,构成赋值语句,如:

char c;

c=getchar();

例1.5 输入单个字符。

使用getchar()函数时,还应注意几个问题:

(1)getchar()函数只能接受单个字符,即使输入数据为数字也按字符处理。当输入多于一个字符时,程序只接收第一个字符。

(2)使用本函数前必须包含文件“stdio.h”。

(3)在TC屏幕下运行本函数时,将退出TC屏幕进入用户屏幕等待用户输入,输入完毕再返回TC屏幕。

(4)程序最后两行可用下面两行的任意一行代替:

putchar(getchar());

printf(“%c”,getchar());