scanf()函数的用法和实践

转载 2012年03月21日 16:23:29
 

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

相关文章推荐

scanf()函数的用法和实践

scanf()函数的用法和实践 daizh 摘要: 本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策。...

scanf, sscanf 函数用法

名称: sscanf() - 从一个字符串中读进与指定格式相符的数据.   函数原型: Int  sscanf( string str, string fmt, mixed var1, mix...

scanf_s()函数的用法

scanf()在vs2013里报错,编译器提示要用scanf_s代替; scanf_s()参数与scanf()不同; 例如scanf(“%s”,&name,n),整形n为name类型的大小,如果n...

scanf()函数中%[]格式控制符用法

scanf()函数中%[]格式控制符用法 作者:武汉华嵌-嵌入式培训中心     助理讲师     张老师   此格式控制符的基本格式为:%[scanfset]   scanfset 有两...

Scanf系列函数的高级用法

Scanf系列函数的高级用法 Scanf 从一个字符串中读进指定格式相符的数据,主要是用于从给定缓冲区内容输入到变量,达到给变量赋值的目的。就是所谓的格式化输入。 在一般情况下,我们在使用scan...

C语言中关于scanf函数的用法

作者:庄老师,华清远见嵌入式学院讲师。 scanf()函数的控制串 函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...

scanf函数的用法

这篇文章是百度百科上面介绍scanf()函数的。个人觉得介绍的还是很到位,特战来以供参看、复习。 scanf 函数原型   int scanf( const char *format, ......
  • ergouge
  • ergouge
  • 2012年05月24日 21:03
  • 532

scanf()函数中%[]格式控制符用法

scanf() 函数中 %[] 格式控制符用法  此格式控制符的基本格式为: %[scanfset] scanfset 有两种形式:一种是以非 ^ 字符开头的 scanset , 表示在读 ...
  • Nicksxs
  • Nicksxs
  • 2013年09月19日 20:46
  • 519

scanf函数解析

  • 2015年08月14日 20:56
  • 50KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:scanf()函数的用法和实践
举报原因:
原因补充:

(最多只允许输入30个字)