c - 重写温度转换程序

标签 c

我正在尝试将温度转换程序重写为使用转换函数的程序:

第一个程序是这样的:

#include <stdio.h>

int main()
{
    float fahr, celsius;
    int lower, upper, step;

    lower = 0;
    upper = 300;
    step = 20;

    fahr = lower;
    while (fahr <= upper) {
        celsius = (5.0/9.0) * (fahr-32.0);
        printf("%d\t%d\n", fahr, celsius);
        fahr = fahr + step;
    }
}

现在这是我用一个函数作为转换的程序:

#include <stdio.h>

int convert(int fahr, int celsius);

// test convert function

main()
{

    int fahr;
    int celsius;

    for(fahr = 0 ; fahr <= 300 ; fahr = fahr + 20){
        printf("%d %d\n", fahr, convert(fahr,celsius));
    }
    return 0;
}

// convert: Fahrenheit to Celsius

int convert(int fahr, int celsius)
{
    int c;
    while (fahr <= 300) 
        c = (5.0/9.0) * (fahr-32.0);

    return c;
}

我遇到的问题是,当我尝试执行该程序时,它只是不断地在命令行中加载,我无法输入任何字符。谁能指出我做错了什么?谢谢。

我的输出应该是这样的:

0   -17
20  -6
40  4
60  15
80  26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
300 148              

最佳答案

你函数中的这行代码

while (fahr <= 300) 

永远不会退出,因为您的输入总是满足不等式。

也没有理由将函数定义为:

int convert(int fahr, int celsius)

因为从未使用过第二个参数。
如果您希望变量 celsius 发生变化,您应该将函数定义为 void 并传递该变量的引用。

#include <stdio.h>

void convert(int fahr, int *celsius);

main()
{
    int fahr;
    int celsius;

    for(fahr = 0 ; fahr <= 300 ; fahr += 20){
        convert(fahr, &celsius);
        printf("%d %d\n", fahr, celsius);
    }
    return 0;
}

void convert(int fahr, int *celsius)
{    
    *celsius = (5.0/9.0) * (fahr-32.0);
    return;
}

关于c - 重写温度转换程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28919212/

相关文章:

python - 在Python中将参数传递给dll的函数会导致访问冲突写入0x00000014

c - 我如何知道可执行文件中有哪些功能?

android - 避免 android native 代码 (C++) 中的竞争条件

c - 为什么 0 删除了字符串的其他部分?

c - 结构数组中的填充

C:Raycaster 不工作

c - 列出递归调用中的参数 (C)

c++ - 数组中的重复数字

c - C 中的 "Pointer Expected"和 "Conflicting argument type"错误

c - 内存泄漏以及修复内存泄漏后的错误