【问题标题】:error in outputting information c programming输出信息错误 c 编程
【发布时间】:2015-04-12 16:23:59
【问题描述】:

这个程序可以按照我的意愿运行,但只有一个错误。它不会从欧元转换成美元,它只是给我

0.0 欧元 = 0.0 美元;

你们能帮帮我吗?

#include <stdio.h>
#include <stdlib.h>

void dollar(float dollar);

int main()
{
    char what;
    int howmany;
    int i;
    float dollar2;
    float euro2;

    printf("enter how many times do you want to convert\n");
    scanf(" %d", &howmany);
    printf("enter U if you want to convert from USD to Euro\n");
    printf("enter E if you want to convert from Euro to USD\n");

    for(i=0; i<=howmany-1; i++)
    {
        scanf(" %c", &what);
        if(what == 'E')
        {
            printf(" Enter how many euros do you want to convert\n");
            scanf(" %f", &euro2);
            euro(euro2);
        }
        if(what == 'U' ){
            printf(" Enter how many dollars do you want to convert\n");
            scanf(" %f", &dollar2);
            dollar(dollar2);
        }
    }
    return 0;
}

void dollar(float dollar)
{
    float euro = 0.94 * dollar;
    printf("%0.2f dollar = %0.2f euro\n", dollar, euro);
    return;
}

void euro(float euro)
{
    float dollar = 1.37 * euro;
    printf("%0.2f EURO = %0.2f DOLLAR\n", euro, dollar);
    return;
}

【问题讨论】:

  • 我先输入 4 然后它要求输入货币所以我输入 E 就是这样
  • 是的,它适用于美元,但不适用于欧元!
  • 声明euro 函数的原型可能是个好主意。
  • 我工作不好最后忘记添加欧元函数的原型
  • 您没有检查 scanf() 返回值,它可能由于语言环境或其他问题而无法 scanf() 输入,但您不知道,因为您忽略了返回价值。

标签: c output scanf


【解决方案1】:

“在计算机编程中,函数原型或函数接口是函数的声明,它指定函数的名称和类型签名(arity、参数类型和返回类型),但省略了函数体。” https://en.wikipedia.org/wiki/Function_prototype

基本上,由于 euro 是在 main 之后声明的,所以当您在 main 中调用 euro 时,它不知道函数在哪里。这可以通过在 main 上方声明函数或使用函数原型来避免。

函数原型的结构是这样的

your_return_type function_name(arg_type,arg_type,arg_type....);

【讨论】:

    【解决方案2】:

    您没有在main() 之前声明euro(),因此,当您在main() 中调用它时,编译器假定它将int 作为参数,在传递时将您的值转换为0

    添加这个

    void euro(float value);
    

    main() 之前,它会起作用。

    但我建议检查scanf()的返回值即使它工作,因为它会更健壮,你会习惯做错误检查,这是一件很繁琐的事情,但却是非常必要的事情也是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2012-11-11
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 2015-01-12
      相关资源
      最近更新 更多