中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
scanf()的小问题
作者:未知 时间:2005-09-13 23:33 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:scanf()的小问题

scanf()的小问题

初学UNIX C时的一点小收获
作者:未知 来源:未知 加入时间:2004-8-10 开发文档


下面是我以前写代码时遇到的一个小程序,问题不大,但是忙活了好半天!下面我就用比较正是的方式来将这段经历送给大家。

请在vi编辑器下编写这段代码.

/*a.c*/

#include<stdio.h>

main()

{

       int I = 0;

       while(I != 1)

       {

              scanf(“%d”, &I);

}

}

我曾经问过几个朋友:这段代码有没有问题;都说:应该没问题吧!那么我们来测试一下。

我们先写一段简单的makefile

下面在UNIX下输入

$vi makefile

vi编辑器下编辑下面这段代码

#这是一段makefile代码

#作用是:编译a.c成可执行文件a

HEADERS = include/stdio.h

SOURCES = a.c

PRODUCT = a

CC = cc

$(PRODUCT):$(SOURCE)

        $(CC) -o $(PRODUCT) $(SOURCES)

编辑完成后,我们来执行makefile

$  make<回车>

        cc -o a a.c

现在一个可执行的a已经生成了,下面开始写我们的单元测试计划

测试编

输入

输出

测试结果

分析

1

1<回车>

跳出

 

 

2

2<回车>

进入下一次输入状态

 

3

1.2<回车>

跳出

 

4

1.9<回车>

跳出

 

5

0.9<回车>

进入下一次输入状态

 

6

a<回车>

进入下一次输入状态

 

 

 

 

$ a

1

$

边测试边填写测试计划表

测试编

输入

输出

测试结果

分析

1

1<回车>

跳出

正确

 

2

2<回车>

进入下一次输入状态

正确

3

1.2<回车>

跳出

正确

4

1.9<回车>

跳出

正确

5

0.9<回车>

进入下一次输入状态

正确

6

a<回车>

进入下一次输入状态

 

 

看样子没问题,还有一步就完成了,输入一个非数值,a,回车!好像没问题!再输入1回车!!问题出现了!没有退出循环!Ctrl+c退出吧!

$ a.out

a

1

 

 

^C$

测试编

输入

输出

测试结果

分析

1

1<回车>

跳出

正确

此代码有一处严重错误将不予以发布

2

2<回车>

进入下一次输入状态

正确

3

1.2<回车>

跳出

正确

4

1.9<回车>

跳出

正确

5

0.9<回车>

进入下一次输入状态

正确

6

a<回车>

进入下一次输入状态

出错

 

 

 

为什么会这样呢?出现了严重的BUG,马上调试。首先让我们在scanf语句后面加上一句:

printf(“%d”, I),看一看究竟I后来发生了什么样的变化,然后重复编号6的测试步骤,你会发现程序执行进入了死循环!它在不停的打印0!也就是说scanf根本不执行了!为什么会这样呢?我们的scanf 去哪里了?经过一番认真学习和听取老师们的指导终于明白,原来是这样的。先看下面的概念。

       scanf在发生输入错或者读到了EOF关闭本页

 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有