下面是我的代码:
#include <stdio.h>
void convert_weight(int x , char a, int* y, char* b)
{
if (a == 'F')
*y = (x-32) * 5 / 9;
*b = 'C';
if(a == 'C')
*y = x*9 / 5 + 32;
*b = 'F';
}
int main()
{
int degrees1 = 50, degrees2;
char scale1 = 'F', scale2;
convert_weight(degrees1, scale1, °rees2, &scale2);
printf("%d %c = %d %cn", degrees1, scale1, degrees2, scale2);
degrees1 = 10;
scale1 = 'C';
convert_weight(degrees1, scale1, °rees2, &scale2);
printf("%d %c = %d %cn", degrees1, scale1, degrees2, scale2);
return 0;
}
输出如下:
50 F = 10 F
10 C = 50 F
注意,我的第一行返回的是10f而不是10c。我不太确定为什么会发生这种情况。如果char a == 'F'
,然后我试图设置scale2等于'C'通过解除束缚,就像我做的学位2,它似乎已经完美地工作。我看不到代码中的错误,导致我在两个输出中都得到'F'。
你缺少大括号:
void convert_weight(int x , char a, int* y, char* b)
{
if (a == 'F')
{
*y = (x-32) * 5 / 9;
*b = 'C';
}
if(a == 'C')
{
*y = x*9 / 5 + 32;
*b = 'F';
}
}
如果没有大括号,*b
将始终是'F'
。
您在if()
测试中忘记了{}
:
在没有{}
的情况下,只有if()
之后的FIRST行成为执行的代码:
if (a == 'F')
*y = (x-32) * 5 / 9; // part of the IF
*b = 'C'; // NOT part of the IF
所以你的*b = 'F'
总是执行,迫使你总是报告F
。
if (a == 'F') {
*y = (x-32) * 5 / 9;
*b = 'C';
}
两个if()
块的类型代码
你需要大括号:
void convert_weight(int x , char a, int* y, char* b)
{
if (a == 'F') {
*y = (x-32) * 5 / 9;
*b = 'C';
}
if(a == 'C') {
*y = x*9 / 5 + 32;
*b = 'F';
}
}
因为只有第一个语句是由if
控制的
在第一种情况下,您更改传递的变量两次。修改后需要显式退出函数
#include <stdio.h>
void convert_weight(int x , char a, int* y, char* b)
{
if (a == 'F') {
*y = (x-32) * 5 / 9;
*b = 'C';
return;
}
if(a == 'C') {
*y = x*9 / 5 + 32;
*b = 'F';
return;
}
}
int main()
{
int degrees1 = 50, degrees2;
char scale1 = 'F', scale2;
convert_weight(degrees1, scale1, °rees2, &scale2);
printf("%d %c = %d %cn", degrees1, scale1, degrees2, scale2);
degrees1 = 10;
scale1 = 'C';
convert_weight(degrees1, scale1, °rees2, &scale2);
printf("%d %c = %d %cn", degrees1, scale1, degrees2, scale2);
return 0;
}