scanf()函数的用法和实践

来源:互联网 发布:阿里云os手机usb调试 编辑:程序博客网 时间:2024/06/05 17:35
 

scanf()函数的用法和实践

摘要:

本文阐述了基于ANSIWin 95Win 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);

程序运行时一旦输入字符个数大于10p就不再继续读入,而后面的一个读入函数即scanf("%s", str)就会从第11个字符开始读入。

(3)            scanf()函数中没有精度控制。

如: scanf("%5.2f",&a);是非法的。不能企图用此语句输入小数为2位的实数。

(4)            scanf中要求给出变量地址,如给出变量名则会出错

scanf("%d",a);是非法的,应改为scnaf("%d",&a);才是合法的。

转载自:http://blog.csdn.net/21aspnet/article/details/1534090

原创粉丝点击