我曾尝试使用电子设备自动化微积分。不幸的是,似乎我的代码不起作用,因为所有结果都是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
由于
答案 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()调用之前清除换行符