好的,这是我的代码:
#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 %c\n", degrees1, scale1, degrees2, scale2);
degrees1 = 10;
scale1 = 'C';
convert_weight(degrees1, scale1, °rees2, &scale2);
printf("%d %c = %d %c\n", degrees1, scale1, degrees2, scale2);
return 0;
}
这是输出:
50 F = 10 F
10 C = 50 F
请注意,我的第一行是返回10 F而不是10 C.我不太清楚为什么会这样。如果char a == 'F'
那么我试图通过derefrencing将scale2设置为等于'C',就像我对于它似乎已经完美运行的度数2所做的那样。我无法在代码中看到错误导致我为两个输出获得“F”。
答案 0 :(得分:5)
你缺少大括号:
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'
。
答案 1 :(得分:4)
您在{}
次测试中忘记了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()
块的类型代码。
答案 2 :(得分:1)
在第一种情况下,您将传递的变量更改两次。您需要在更改后明确退出函数。
#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 %c\n", degrees1, scale1, degrees2, scale2);
degrees1 = 10;
scale1 = 'C';
convert_weight(degrees1, scale1, °rees2, &scale2);
printf("%d %c = %d %c\n", degrees1, scale1, degrees2, scale2);
return 0;
}
答案 3 :(得分:1)
你需要花括号:
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
控制。