我写了一个特殊的计算器,提示用户输入2个数字,然后显示一个菜单,该菜单基本上询问用户如何处理该输入。它的效果很好,但无论我输入什么数字,结果都是0.我做错了什么?
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
int main()
{
char a, rad, patrat;
float x, y, media, radical, pat1, pat2;
patrat = 253;
rad = 251;
loop:
printf("Input 2 numbers...\n");
scanf("%f %f", &x, &y);
media = (x+y)/2;
radical = sqrt(x+y);
pat1 = x*x;
pat2 = y*y;
loop2:
printf("\n \nA - Arithmetic media.\n");
printf("B - Square root.\n");
printf("C - Sqare of the 2 numbers.\n");
printf("D - Write other numbers.\n");
printf("E - Terminate the program.\n");
a = getch();
switch(a) {
case'a':
system("cls");
printf("Media of the 2 numbers is %f", &media);
goto loop2;
case'b':
system("cls");
printf("%c%f + %f = %f", &rad, &x, &y, &radical);
goto loop2;
case'c':
system("cls");
printf("%f%c = %f, %f%c = %f", &x, &patrat, &pat1, &y, &patrat, &pat2);
goto loop2;
case'd':
goto loop;
case'e':
return 0;
}
}
答案 0 :(得分:1)
你正在使用&amp;在你的printf语句中,你不应该。 Scanf在编写时有它,所以需要指针。
答案 1 :(得分:1)
为什么使用&
运算符printf
运算符?
printf
不接受%f
转换规范的指针参数
float b;
scanf("%f", &b);
但
float a = 42;
printf("%f\n", a);
答案 2 :(得分:1)
printf("Media of the 2 numbers is %f", &media);
应该是
printf("Media of the 2 numbers is %f", media);
同样适用于所有其他printf()
通常goto
语句在向后调用时被视为有害!所以请避免它们。 while(1)
for(;;)
循环可以通过适当的终止条件完成相同的功能。
答案 3 :(得分:0)
在你的printf语句中,你正在使用
printf("Media of the 2 numbers is %f", &media);
&amp; media是可变媒体的地址。 在scanf中,我们提供变量的地址作为参数,以便将值存储在该地址。但是在printf中,我们提供变量值而不是变量地址。如果您提供变量地址,那么它将打印地址而不是值。 所以纠正应该是
printf("Media of the 2 numbers is %f", media);