1

我试图自动化我在使用电子产品时所做的微积分。不幸的是,我的代码似乎不起作用,因为所有结果都是 0.000000(见下文)。

这是我尝试过的: - double 或 int 中的变量 - 删除微积分部分并尝试从输入中获取输出 - scanf_s 和 scan_f。

这些都不起作用。奇怪的是,最后的 printf 甚至不能打印 base_v(例如)。

这是代码本身:

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "math.h"

int _tmain(int argc, _TCHAR* argv[])
{
    // variable declaration
    double base_r, mod_r, base_v, mod_v=0;
    double coeff=1;
    int asdf=1;

    // welcome message
    printf("vMod calculator\n");
    printf("Please enter resistances in Ohms and voltages in Volts\n");

    // retrieve info about vmod
    printf("Enter base resistance\n");
    scanf_s("%f", &base_r);
    printf("Enter modified resistance\n");
    scanf_s("%f", &mod_r);
    printf("Enter base voltage\n");
    scanf_s("%f", &base_v);

    // calculus of modified voltage
    coeff=asdf*((1/base_r)+(1/mod_r));
    mod_v=base_v*base_r*coeff;


    // results
    printf("Base voltage: %f \n", &base_v);
    printf("Base resistance: %f \n", &base_r);
    printf("Modified voltage: %f \n", &mod_v);
    printf("Modified resistance: %f \n", &mod_r);

    system("pause");

    return 0;

}

如果您不理解微积分,请参考下图: http: //pbrd.co/1g6KWLp

谢谢

4

4 回答 4

4

您正在传递printf参数的地址&base_v而不是它的值base_v。简而言之,摆脱&

printf("Base voltage: %f \n", base_v);
printf("Base resistance: %f \n", base_r);
printf("Modified voltage: %f \n", mod_v);
printf("Modified resistance: %f \n", mod_r);
于 2013-10-11T19:35:38.027 回答
3

首先,您将指针打印为浮点数,因此具有未定义的行为

于 2013-10-11T19:35:44.907 回答
1

printf直接获取变量,而不是其地址:

printf("Base voltage: %f \n", base_v);
printf("Base resistance: %f \n", base_r);
printf("Modified voltage: %f \n", mod_v);
printf("Modified resistance: %f \n", mod_r);
于 2013-10-11T19:36:03.183 回答
0

scanf 在第一次调用后在标准输入缓冲区中留下换行符 0x13 和 0x10,因此下一次调用首先获得 13/10,对于 dos/windows 使用 fgets 然后 fscanf 或类似 while((dumchar=getch())==\n); 在每次 scanf() 调用之前清除换行符

于 2013-10-13T01:16:19.747 回答