c语言 - 为什么我的指针没有正确取消引用我想要的输出?



下面是我的代码:

#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, &degrees2, &scale2);
  printf("%d %c = %d %cn", degrees1, scale1, degrees2, scale2);
  degrees1 = 10;
  scale1 = 'C';
  convert_weight(degrees1, scale1, &degrees2, &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, &degrees2, &scale2);
  printf("%d %c = %d %cn", degrees1, scale1, degrees2, scale2);
  degrees1 = 10;
  scale1 = 'C';
  convert_weight(degrees1, scale1, &degrees2, &scale2);
  printf("%d %c = %d %cn", degrees1, scale1, degrees2, scale2);
  return 0;
}

相关内容

  • 没有找到相关文章

最新更新