| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3914 人关注过本帖
标题:求助:scanf :floating point formats not linked 什么意思?
只看楼主 加入收藏
crespo2008
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-8-25
收藏
 问题点数:0 回复次数:13 
求助:scanf :floating point formats not linked 什么意思?
编程后运行TC界面上出现:
scanf :floating point formats not linked
Abnormal program termination

是什么意思啊?我编的程序调试没有错误。
搜索更多相关主题的帖子: point floating formats scanf linked 
2007-08-31 10:08
zzxwill
Rank: 1
等 级:新手上路
帖 子:398
专家分:0
注 册:2007-8-15
收藏
得分:0 

将你的代码提供出来吧.不然别人不知道怎么回来~~


一分耕耘,一分收获。
2007-08-31 18:15
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
TC的经典bug



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
C/C++算法习题(OnlineJudge):[url]http://yzfy.org/[/url]
2007-08-31 18:17
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 
以下是引用雨中飞燕在2007-8-31 18:17:35的发言:
TC的经典bug

我希望雨燕把TC的BUG都写出来,写一篇吧,期待中……


You have lots more to work on! Never give up!c language!
2007-08-31 19:27
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 

我刚刚搜的,大家看看
TC BUG 感觉说的不好

VTuIvUVs.zip (1.95 KB) 求助:scanf :floating point formats not linked 什么意思?



You have lots more to work on! Never give up!c language!
2007-08-31 19:34
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 

转载:
我初学C程序,所以提的问题很浅,希望您不要见笑。我自己编了一个程序,但运行的结果与我预期的不一样。
# include
main()
{static int a[2][3]={{1,3,4},{7,9,6}};
int i,j,k;
for(k=1;k<=2;k++)
{printf("Please input num:");
scanf("%d %d",&i,&j);
if(i<2&&j<3)
printf("num=%d\n",a[i][j]);
else printf("Input is error,\n");
}
printf("programm is complete.\n");
}
我想将第7行改为
scanf("i=%d j=%d",&i,&j);
则程序运行结果变成
please input num:i=1 j=2
num=6
num=6(我原本希望能重复第一行再让我输入)
Programm is complete.
为什么第二次不能输入?
回答:

我使用Turbo C 2.0证实存在你说的问题。象scanf("i=%d j=%d",&i,&j);这样的输入方式比较特别,TC 2.0显然在第一次输入后没有象正常情况一样清楚输入缓冲区,这样第二次执行scanf时,程序并没有让你输入而是直接读入上次输入的结果。如果你一定要这么做,应该在scanf之前加上:
fflush(stdin);
这样清楚掉键盘缓冲区。


You have lots more to work on! Never give up!c language!
2007-08-31 19:45
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 

根据 ANSI C标准,和一些传统 C 的经验

1. C 语言的fflush 只是用作清除 output stream 之用。 对于使用 fflush 在 stdin 这个动作,是没有定义的行为

( ref: ISO/IEC 9899-1999 7.19.5.2 , ANSI Sec. 4.9.5.2 )


2. 这个问题并不是 Turbo C 2.0 的 bug,这是标准 scanf 的正常行为。

Scanf 并不清理使用者输入的 newline character (0xa) ,在连续的 scanf 中如果参数字符串的第一个字是 % 参数 (for example: scanf(“%d”); ),它将会顺利地把 <last newline char><string> 读取,并且把 newline char 视作 white space,把它忽略。因此,在这个帖的代码 (修改前) 是可以正常运作。这是传统的 scanf 运用方法。

修改后的代码, scanf("i=%d j=%d",&i,&j); ,问题出现在参数字符串的开头是 ‘i=’ ,使 scanf 遇到最后一次 newline character 的时候便进行辨认,结果提前结束,返回错误。 这段程序的 i 和 j 不变,所以情形像 scanf 把上一次的数据读取一样,做成这个错误。

标准 scanf 本身的设计存在很多毛病,所以普遍建议是,不要采用 scanf,或是在 scanf 后作出完善的检查和处理。


3. 在这个情况,由于 fflush 不应该使用在 stdin 上,所以我们使用其它方法来解决,例如在 scanf 后面,加上一行 getchar(); ,把没有清理的 newline char 消除

printf("Please input num:");
scanf("i=%d j=%d",&i,&j);
getchar(); // clear newline


You have lots more to work on! Never give up!c language!
2007-08-31 19:46
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 

You have lots more to work on! Never give up!c language!
2007-08-31 19:48
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 
你們討論TC的BUG怎么把樓主的求助給忽略了。栖柏你晚上不上自習有跑來上網玩了。


樓主的程序遇到的BUG是windows下編譯器的通病,從DOS時代開始的TC,到現在的VC6.0, VS2003都有,VS2005沒用不知道。
解決辦法是換用DEV-CPP編譯器,另一個方法是提示編譯器在鏈接時加載浮點運算庫:
在你的程序中加入這么一句:float link_float=0.1;

2007-08-31 20:48
栖柏
Rank: 2
等 级:论坛游民
威 望:3
帖 子:1103
专家分:17
注 册:2007-8-23
收藏
得分:0 

你换头像了呀,我现在在用LINUX了,新学期,一起加油
我在宿舍连上网了,不久就可以用了,也搭建了局域网
感觉网上搜资料好快,比图书馆的查快多了
不过系统性学习才重要


You have lots more to work on! Never give up!c language!
2007-09-01 11:02
快速回复:求助:scanf :floating point formats not linked 什么意思?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016532 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved