请问C语言中double类型变量动态分配内存时用什么输入格式?

souvis 2007-12-29 04:33:45
C语言中double类型变量动态分配内存时用什么输入格式?比如:

double* pData = NULL;
pData = (double*)malloc(sizeof(double));
scanf("%lf",pData);


我在TC下编译时都没出错,在运行时都出了问题,运行到该行时就终止了,没任何提示。
而在VC下可以用%lf;但%f不行,会输出错误的答案。
或者在TC下不能给动态分配的变量这么赋值?可是我又试了一下int类型的,运行是正确的;然后又再试了下float,结果跟double的情况一个样。啥回事哦大虾们
...全文
1881 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
brookmill 2008-02-20
  • 打赏
  • 举报
回复
学习
imasmallbird 2008-02-20
  • 打赏
  • 举报
回复
问一下 15楼的
long float 类型是不是有的编译器下没有??
souvis 2008-02-19
  • 打赏
  • 举报
回复
我用TC2.0调试过了16、17、22楼所提及的方法,但都一样地在scanf语句停下了,说明还是TC对双精度浮点型的支持欠缺
ttlyfast 2008-01-16
  • 打赏
  • 举报
回复
http://www.cnblogs.com/qixin622/archive/2007/05/01/734006.html
ttlyfast 2008-01-16
  • 打赏
  • 举报
回复
floating point formats not linked
貌似 没链接浮点库?
lovelyday 2008-01-16
  • 打赏
  • 举报
回复
VC下
scanf("%lf", pData);
TC下,加了初始化,再输入,象16楼的
*pData = 0.0;
scanf("%lf", pData);


souvis 2008-01-16
  • 打赏
  • 举报
回复
谢谢大家的激情留言,小弟实在感激不尽!最近由于忙于考试,未能及时上来回复帖子,真对不住大家的热情了。
下面小弟将 就大家所给的建议逐一进行调试
Holinan 2008-01-03
  • 打赏
  • 举报
回复
TC的编译器原因吧
之前还遇到个问题在TC下的代码,所有的定义都得在函数的最开头才能执行,在多个变量的定义中间如果有其它代码就会编译不过,在VC下程序就是OK的
而且TC的可视化做的不太好啊
gold_wings 2008-01-03
  • 打赏
  • 举报
回复
VC下double输入格式应为lf
scanf("%lf",pData);
printf("%f",*pData);

scanf("%lf",pData);
printf("%lf",*pData);
试过后都可以
souvis 2008-01-02
  • 打赏
  • 举报
回复
对了,运行到该行被终止后,我查看到输出屏提示为
scanf:floating point formats not linked
Abnormal program termination
(是在TC环境下)
另:我尝试改为%d,运行到此行代码(scanf("%d", pData);)时没停下
souvis 2008-01-02
  • 打赏
  • 举报
回复
to 4楼大虾
恩,之前我也用过cin输入流,没问题的。我都是使用C++语言,在VC平台中进行编程的,平时也不用scanf的,只是跟同学讨论些C方面代码时偶然中遇到了这个突如其来的问题,几番调试后感到大惑不解,于是赶忙跑上来向各位神家讨教来了。
目前也只暂时通过饶 给一个普通的变量scanf,然后再用它来给*pData赋值 这么一个让人感到尴尬的弯子来实现了。
souvis 2008-01-02
  • 打赏
  • 举报
回复
to 2楼师傅
代码为:
#include "stdio.h"
#include "stdlib.h"
void main()
{
double* pData = NULL;
pData = (double*) malloc(sizeof(double));
scanf("%lf", pData);
printf("%f", *pData);
getch();
}
sheenl 2008-01-02
  • 打赏
  • 举报
回复
编译器的问题, 换g++就没问题了.
souvis 2008-01-02
  • 打赏
  • 举报
回复
不好意思,这几天忙没上来看。谢谢大家的热情!
对于1楼先生所说的用
scanf("%lf",*pData);
请问这是什么个语法呢?
MSDN:
int scanf( const char *format [,argument]... );

Remarks

The scanf function reads data from the standard input stream stdin and writes the data into the location given by argument. Each argument must be a pointer to a variable of a type that corresponds to a type specifier in format. If copying takes place between strings that overlap, the behavior is undefined.

本来接收的是地址为什么要传*pData给它呢?难道有何奥妙隐藏其中?
可是我也试了一下,问题还是没能解决啊。
//////////////////////////////
vecshid 2008-01-02
  • 打赏
  • 举报
回复
Mark,学习了
flyingwow99 2008-01-02
  • 打赏
  • 举报
回复
scanf:floating point formats not linked
------------------------------
很多年前的TC的经典BUG。。。。。。程序没加载浮点运算库
在程序一开始加几句废话,比如
double tmp;
dmp = 2.0 * 3.0;
然后就正常了
楼上的 *pData =0.0 应该可以
总之要显式的使用一下浮点数
ltc_mouse 2008-01-02
  • 打赏
  • 举报
回复
试试这个,加点初始化。
另外,%lf与%f确实不同,不过不会在输入时出问题的

double* pData = NULL;
pData = (double*)malloc(sizeof(double));
*pData = 0.0;
scanf("%lf", pData);
就呆在云上 2008-01-02
  • 打赏
  • 举报
回复

int _tmain(int argc, _TCHAR* argv[])
{
float a;
scanf("%f", &a);
printf("a = %f\n", a);
printf("sizeof(long float)=%d\n , sizeof(long float)=%d\n, sizeof(double)=%d!\n",
sizeof(float),
sizeof(long float) ,sizeof(double));
double a1;
scanf("%f", &a1);//明显不是输入的数字,因为之定义4个字节,确要使用8个字节
printf("a = %f\n", a1);

double a2;
scanf("%lf", &a2);
printf("a = %f\n", a2); //这里有不稳定因素,输出用f而不是lf就只能输出4个字节,如果不超出还是可以的
return 0;
}


f跟lf表示的大小是不一样的
程序如下:
float是4个字节,而double是8个字节,如果你要写入double你就必须写入8个字节,4个字节的写入使得另外4个字节就是随机数字,可以用long float来替代double因为他也是8个字节。
bargio_susie 2008-01-02
  • 打赏
  • 举报
回复
1.看你程序应该没什么理由在scanf那里停下来,手头没TC编译器试。
2.double型的输出应该是lf,即:
printf("%lf", *pData);
3. 你这样来尝试下会不会有问题??
double pData;
scanf("%lf", &pData);
printf("%lf\n", pData);

4. 如果上面的没问题,那TC也太。。。

BTW:VC也不一定只可跑C++的,运行C也蛮好。不一定要用TC的,那个太古老了,还是换个编译器吧。
mzyong 2008-01-02
  • 打赏
  • 举报
回复
在VC中,%f表示的是float类型,%lf表示的才是double类型,两者表示的大小是不一样的,

int main(void)
{
double *pData = NULL;
pData = (double*)malloc(sizeof(double));
if ( pData != NULL)
{
printf("please input the number.\n");
scanf("%f\n",pData);
printf("the numble is %f\n",*(float*)pData);

free(pData);
}

return 0;
}
加载更多回复(7)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧