这个C程序有什么问题?

时间:2012-01-04 08:56:27

标签: c

我写了一个特殊的计算器,提示用户输入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;
    }
    }

4 个答案:

答案 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);