iptton 发表于 2006-6-15 23:20

这段代码有错吗?(关于 scanf)[已解决!!]

这段代码:
无法输出"pass "(也就是无法达到printf("pass")这段代码就退出了)

#include <stdio.h>
#include <math.h>
#define abs(a) (a)>0?(a):-(a);
struct a{
int i;
float f;
};
main()
{
struct a *pa;
pa=(struct a*)malloc(sizeof(struct a));
scanf("%d",&pa->i);
printf("%d",pa->i);
getch();/*a pause*/
scanf("%f",&pa->f);
printf("pass?");
getch();
}


[ 本帖最后由 iptton 于 2006-6-16 01:48 编辑 ]

麦当劳叔叔 发表于 2006-6-15 23:58

不知道为什么我VC里竟然说getch没有定义
用getchar代替会出现那个debug error,不知道是不是和楼主退出的原因一样?

iptton 发表于 2006-6-16 00:13

getch()只是在WINTC中用来看屏幕的。。。不是这个问题。。。

在VC中可以不要getch()

powerwind 发表于 2006-6-16 00:26

我用DEV_CPP来编译运行,一切正常啊!

iptton 发表于 2006-6-16 00:29

用TC++3.0 和WINTC都有问题。。。

网上也有人问这个问题但没有答案。。。

主要是float的问题   只要是浮点类型的,在WINTC 和TC++3.0里都会出错

而改成INT型 则没有问题

麦当劳叔叔 发表于 2006-6-16 00:30

发现这样竟然也会出错-_-!!!
main()
{
        float f;
        scanf("%f",&f);
}

iptton 发表于 2006-6-16 00:33

楼上的,你的没有错呀。

我试过的。。。在WINTC 和 TC++3.0下都不会有错……

iptton 发表于 2006-6-16 01:21

是编译器的问题:
引用自:
http://www.stu-shop.com/post/c-scanf.html

问题一: 程序编译通过,但运行错误提示如下:
scanf : floating point formats not linked
Abnormal program termination

出错示例程序:

#include <stdio.h>
int main(void)
{
int i,j ;
float s;

/*这里*/

for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",&s);

for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%f",s);
}

这实际上是个与本文主题无关的问题,也是与scanf()函数无关,是编译器的问题。

原因很明确:没有链接浮点库。早期系统内存资源紧张,多维浮点数组占用内存量大(一维浮点数组就没有此问题),因此TC在编译时尽量不加入无关的部分,在没发现需要浮点转换程序时,就不在可执行程序中安装这个部分。而有时TC又不能正确识别实际上确实需要做浮点转换,因此就会出现上面错误。

解决的方法:告诉TC需要做浮点数的输入转换。将以下语句加入上面程序中标有/*这里*/处。

方法一:
float c;
scanf("%f",&c);

方法二:
float c,*t;

t=&c;
.....

也就是说,编译器只要有浮点转换的线索,TC就会把浮点转换连上,所以一般大一点的程序里的就会有浮点变量反而没有此问题。

但问题到此并没结束,我在上面有句“一维浮点数组就没有此问题”,那么我们来看看这样行不行:

#include <stdio.h>
int main(void)
{
int i,j ;
float s,*ptr;

ptr=&s;


for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%f",ptr+i*3+j);

for(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%7.2f\n",s);
}

这样我们就把多维浮点数组降为一维浮点数组来处理,调试一下,程序运行正常。这说明TC编译器仅在处理多维浮点数组(结构体)有此“未链接浮点库”的问题。

[ 本帖最后由 iptton 于 2006-6-16 01:23 编辑 ]

powerwind 发表于 2006-6-16 12:34

原来是这么回事,还没遇到过.

hjack 发表于 2006-6-22 01:26

有这样的情况呀,没有遇到过呢。用gcc编译楼主的代码没有问题。
页: [1]
查看完整版本: 这段代码有错吗?(关于 scanf)[已解决!!]