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

Dan*_* Jr 0 c pointers dereference

好的,这是我的代码:

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

}
Run Code Online (Sandbox Code Playgroud)

这是输出:

50 F = 10 F
10 C = 50 F
Run Code Online (Sandbox Code Playgroud)

请注意,我的第一行是返回10 F而不是10 C.我不太确定为什么会发生这种情况.如果char a == 'F'那时我试图通过derefrencing将scale2设置为等于'C',就像我在为它看起来完美的度数2所做的那样.我无法在代码中看到错误导致我为两个输出获得'F'.

Fid*_*its 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';
    }
}
Run Code Online (Sandbox Code Playgroud)

没有牙套,*b将永远'F'.

  • 另外,为什么不是convert_temp()? (2认同)