繁体   English   中英

随机和指针不起作用

[英]random and pointers doesn't work

您好,我试图将浮点数增加到Pointer,但是不知何故,程序始终打印0.00000。 该数字应介于12.01到-13.00之间。

我的代码-

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    float* num = (float*)malloc(sizeof(float));

    srand(time(NULL));

    *num = rand() % 1300 + 1201 / 100.00;

    printf("%f",num);
    system("PAUSE");

    free(num);
}

如果有人可以帮助我解决该问题,我将非常感谢。

如果要在打印地址时打印号码,请注意*:

printf("%f",*num);

您需要打印num指向的值:

printf("%f", *num);

两件事情:

  1. 不要将您的malloc为C语言(与您的问题无关,但还是个好主意
  2. 启用编译器警告

这两件事都可以帮助您避免问题。 gcc -Wall编译gcc -Wall我得到:

警告:格式'%f'期望类型为'double'的参数,但是参数2的类型为'float *'[-Wformat =] printf(“%f”,num);

那会回答你的问题。 您正在使用%f格式说明符,但传递的是指针,而不是floatdouble 您需要取消引用指针:

printf("%f", *num);

这些是错误:

  • *num = rand() % 1300 + 1201 / 100.00;

    *num在[12.01,1311.01]范围内。 如果需要[12.01,13.00]范围内的数字,请更改分配:

     *num = 12.01 + (rand() % 100) / 100.0; 
  • printf("%f", num); 应该是printf("%f", *num);

另外,在编译过程中启用额外的警告也是一个好主意。 例如-Wall -Wextra

clang -Wall -Wextra filename.c
warning: format specifies type 'double' but the argument has type 'float *' [-Wformat]

与gcc相同

gcc -Wall -Wextra filename.c

warning: format '%f' expects argument of type 'double', but argument 2 has type 'float *' [-Wformat=]

如果您正在使用malloc / free ,则应检查分配失败。

不能保证内存分配成功,而是可以返回空指针。 如果不检查是否实现了成功的分配,这通常会导致程序崩溃,因为在空指针取消引用上会导致分段错误。

因此,您可以通过以下方式更改代码:

float *num = malloc(sizeof(float));
if (num)
{
  // your code
}
else
{
  // handle failure
}

无论如何,最好只使用一个简单的浮点数。

除了修复printf("%f", *num); ,您需要检查一下数学!

如果您确实希望结果在12.01到-13.00之间,

*num = (rand() % 2501 - 1300) / 100.00;

你程序调用未定义的行为,因为num是不是float ,但一个指向float和你试图打印它作为一个float%f转换说明在printf调用。 另外,不要转换malloc的结果,而在main的参数列表中明确提及void

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
    float *num = malloc(sizeof *num);
    srand(time(NULL));
    *num = rand() % 1300 + 1201 / 100.00;
    printf("%f", *num);   // note *num instead of num
    system("PAUSE");

    free(num);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM