【问题标题】:New to Custom functions and having an issue with Pointers自定义函数的新手和指针问题
【发布时间】:2016-10-27 17:27:30
【问题描述】:

所以我有一个非常简单的代码来使用用户输入表单计算声速,当我运行程序时我得到一个答案但它不正确并且我得到错误

'第 14 行:赋值使指针变成整数而不进行强制转换'。

我不知道这意味着什么,并尝试调整我的指针和函数来尝试解决这个问题。任何帮助,将不胜感激。

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

int SpeedofSound(int t,int Answer);
int t,Answer;
int *pAnswer;

int main(void)
{
    printf("Please enter a Temp (Fahrenheit) to calculate the speed of sound.\n");
    scanf(" %d", &t);

    Answer = SpeedofSound;
    printf("At Temp %d, the Speed of sound is %d feet/second.", t, Answer);
    return 0;
}

int SpeedofSound(int t,int Answer)
{
    *pAnswer = 1086 * sqrt(((5 * t) + 297)/247);
    Answer = *pAnswer;
    return (Answer);
}

【问题讨论】:

  • 你显然知道如何调用函数(提示:printfscanf 都是函数),那你为什么不调用你的函数呢?但是,您确实需要了解有关指针的更多信息。这里不需要指针。我建议你find a good beginners book to read
  • 请记住,函数参数int t 与全局变量int t 无关,Answer 也是如此。该函数将使用范围最近的那个——函数参数。全局变量int t, Answer; 实际上属于main。该函数不需要第二个参数Answer,因为计算结果作为函数值返回。
  • *pAnswer = 1086 * sqrt(((5 * t) + 297)/247); 是您的下一个问题。 pAnswer 不指向有效内存,您需要分配它(我忽略了整体设计问题,因为这显然是一种做法,但是使用全局指针并从该函数中对其进行变异并不是完成的好方法你想要什么。)。
  • 另外,您可能需要进行浮点计算而不是整数计算。
  • None 您的全局变量是必需的(尽管您可能需要在 main() 中声明的 int Answer)。您无需声明函数中使用的变量的全局副本。

标签: c function pointers


【解决方案1】:

这是你的问题:

Answer = SpeedofSound;

这不是函数调用,而是赋值。您将函数的地址分配给一个名为 Answer 的整数变量。改为这样做:

Answer = SpeedofSound(t);

并重写函数以接受一个参数。放下 pAnswer 的东西。祝你好运

【讨论】:

    【解决方案2】:

    这就是编译器所抱怨的:

    Answer = SpeedofSound;
    

    您实际上并没有调用 SpeedofSound 函数 - 因为您离开了 () 函数调用运算符,编译器将 SpeedofSound 解释为指向该函数的指针。因此,在上面的行中,您尝试将指针值分配给 int,如果没有强制转换,这是不允许的。

    您的代码中有很多根本不需要的内容:您可以将其重写为

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int SpeedofSound(int t);
    
    int main(void)
    {
        int t;
        int Answer;
    
        printf("Please enter a Temp (Fahrenheit) to calculate the speed of sound.\n");
        scanf(" %d", &t);
    
        Answer = SpeedofSound( t ); 
        printf("At Temp %d, the Speed of sound is %d feet/second.", t, Answer);
        return 0;
    }
    
    int SpeedofSound(int t)
    {
        return 1086 * sqrt(((5 * t) + 297)/247);
    }
    

    您不需要任何指针或全局变量。您只需要tAnswer

    注意整数运算给出整数结果;即1/2 == 0。您可能希望使用doubles 进行输入和计算:

    double SpeedofSound( double t )
    {
      return 1086.0 * sqrt(((5.0 * t) + 297.0)/247.0);
    }
    
    int main( void )
    {
      double t;
      double Answer;
      ...
    }
    

    您还需要在printfscanf 调用中将%d 替换为%f

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多