标签:
杂谈 |
分类: Visual_C |
scanf()函数的用法和实践daizh摘要:本文阐述了基于ANSI,Win
95,Win NT上的
C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策。关键词:scanf()一、
序言在CSDN论坛的C/C++版块,我时常见到“对于scanf()函数的用法、及出现的各种错误而迷惑”的帖子,萌发了我写这篇文章的念头。文中结合自身在学习和编程中对它的认识和体会,以具体示例阐述问题,目的在于使得初学者能够正确使用scanf()函数,少走不必要的弯路。二、
scanf()函数的用法scanf()函数是格式化输入函数,它从标准输入设备(键盘)
读取输入的信息。其调用格式为:
scanf("<格式化字符串>",<地址表>);格式化字符串包括以下三类不同的字符;1、
格式化说明符:格式化说明符与printf()函数中的格式说明符基本相同。但和printf()函数中格式字符串的用法有一些小区别。我们来看下面这个表。格式字符
说明
%d
从键盘输入十进制整数
%o
从键盘输入八进制整数
%x
从键盘输入十六进制整数
%c
从键盘输入一个字符
%s
从键盘输入一个字符串
%f
从键盘输入一个实数
%e
与%f的作用相同附加格式说明字符表字符
说明
L
输入"长"数据
H
输入"短"数据
M
指定输入数据所占宽度
*
空读一个数据2、
空白字符:
空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。3、
非空白字符:
一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。地址表是需要读入的所有变量的地址,而不是变量本身。这与printf()函数完全不同,要特别注意。各个变量的地址之间同","分开。例如:#include
<stdio.h>void
main(){
int i,
j;
printf("i,
j=?\n");
scanf("%d, %d", &i,
&j);}上例中的scanf()函数先读一个整型数,然后把接着输入的逗号剔除掉,最后读入另一个整型数。如果","这一特定字符没有找到,scanf()函数就终止。若参数之间的分隔符为空格,则参数之间必须输入一个或多个空格。说明:(1)
对于字符串数组或字符串指针变量,由于数组名和指针变量名本身就是地址,因此使用scanf()函数时,不需要在它们前面加上"&"操作符。例如:#include
<stdio.h>void
main(){
char *p,
str[20];
p = new
char[20];
scanf("%s", p);
scanf("%s",
str);
printf("%s\n", p);
printf("%s\n",
str);}(2)
可以在格式化字符串中的"%"各格式化规定符之间加入一个整数,表示任何读操作中的最大位数。如上例中若规定只能输入10字符给字符串指针p,则第一条scanf()
函数语句变为:scanf("%10s",
p);程序运行时一旦输入字符个数大于10,p就不再继续读入,而后面的一个读入函数即scanf("%s",
str)就会从第11个字符开始读入。(3)
scanf()函数中没有精度控制。如:
scanf("%5.2f",&a);
是非法的。不能企图用此语句输入小数为2位的实数。(4)
scanf中要求给出变量地址,如给出变量名则会出错如
scanf("%d",a);是非法的,应改为scnaf("%d",&a);才是合法的。(5)
在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。(6)
在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。例如:scanf("%c%c%c",&a,&b,&c);输入为:d
e f则把'd'赋予a, ' (空格)'赋予b,'e'赋予c。因为%c
只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此把'
'作为下一个字符送给b。只有当输入为:def
时,才能把'd'赋于a,'e'赋予b,'f'赋予c。
如果在格式控制中加入空格作为间隔,如 scanf ("%c
%c
%c",&a,&b,&c);则输入时各数据之间可加空格。我们用一些例子来说明一些规则:#include
<stdio.h>void
main(){
char
a,b;
printf("input character
a,b\n");
scanf("%c%c",&a,&b);
printf("%c%c\n",a,b);}由于scanf函数"%c%c"中没有空格,输入M
N,结果输出只有M。而输入改为MN时则可输出MN两字符,见下面的输入运行情况:
input character
a,bMN
(你输入的值)MN
(屏幕上显示的值)#include
<stdio.h>void
main(){
char
a,b;
说明
%d
从键盘输入十进制整数
%o
从键盘输入八进制整数
%x
从键盘输入十六进制整数
%c
从键盘输入一个字符
%s
从键盘输入一个字符串
%f
从键盘输入一个实数
%e
与%f的作用相同附加格式说明字符表字符
说明
L
输入"长"数据
H
输入"短"数据
M
指定输入数据所占宽度
*
空读一个数据2、