函数未提供有效输出(Visual Studio 2010上的C)

时间:2013-10-11 19:31:01

标签: c printf calculator

我曾尝试使用电子设备自动化微积分。不幸的是,似乎我的代码不起作用,因为所有结果都是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 个答案:

答案 0 :(得分: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);

答案 1 :(得分:3)

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

答案 2 :(得分: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);

答案 3 :(得分:0)

scanf在第一次调用后在stdin缓冲区中留下换行符0x13和0x10,所以对于dos / windows,下一次调用首先得到13/10 使用fgets然后fscanf或类似的东西         而((dumchar =的getch())== \ n)的; 在每次scanf()调用之前清除换行符