2012-01-04 142 views
0

我写这提示2号用户一个特殊的计算器,然后显示其basicly询问用户如何处理该输入的菜单。它很好用,但无论输入什么数字,结果都是0.我做错了什么?这个C程序有什么问题?

#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; 
    } 
    } 
+3

您可能需要首先阅读[文章](http://www.cs.utexas.edu/~EWD/transcriptions/EWD02xx/EWD215.html)和/或[这个问题(http://stackoverflow.com/questions/46586/goto-still-considered-harmful),并尝试restructurate你的代码;) – Kevin 2012-01-04 09:00:13

+0

编辑:我会考虑它。 – Bugster 2012-01-04 09:00:58

+0

哇!转到 - 在一段时间内没有看到其中的一个。 – Tom 2012-01-04 09:02:02

回答

1

您在您的printf语句中使用&,您不应该这样做。 Scanf拥有它,因为它的写入需要指针。

+0

谢谢,仅此而已。愚蠢的错误。 – Bugster 2012-01-04 09:07:28

1

为什么您使用的是运营商&printf参数呢?

printf不采取指针参数为%f转换规格

float b; 
scanf("%f", &b); 

float a = 42; 
printf("%f\n", a); 
1
printf("Media of the 2 numbers is %f", &media); 

应该是

printf("Media of the 2 numbers is %f", media); 

类似对于所有其他printf()

一般goto声明被认为是有害的,当他们被称为倒退!所以请避免它们。同样的功能可以通过一个while(1)for(;;)循环与适当的终止条件来完成。

0

在你的printf语句,您使用的

printf("Media of the 2 numbers is %f", &media); 

&媒体是你的变量媒体的地址。 在scanf中,我们提供变量的地址作为参数,以便它将值存储在该地址。但是在printf中,我们提供了变量值而不是变量地址。如果你提供可变地址,那么它会打印地址而不是数值。 所以修正应该是

printf("Media of the 2 numbers is %f", media);