c指针引用和解除引用

时间:2014-03-23 05:25:33

标签: c pointers

编写一个将对三个数字进行排序的程序。用户将在名为num1,num2和num3的变量中输入三个数字。您将通过引用这三个值传递给一个名为sortNums()的函数,然后将它们从最小到最大排序。 Num1将保持最小值,num2将保持中间值,num3将保持最大值。从main()按顺序打印数字。

我如何修复我的if语句。当我把123放到右边时,当我把它拿出来时它就出来了,但是当我把它放到213时它出错了。

 //function prototype
    void sortNums(int*,int*,int*);
    int main()
    {
     //Variables   

     int num1;
     int num2;
     int num3;

     //refernce numbers variables
     int *one;
     int *two;
     int *three;

     //inputing nums

     printf("Please enter num1: \n");

     scanf("%d", &num1);

     printf("Please enter num2: \n");

     scanf("%d", &num2);

     printf("Please enter num3: \n");

     scanf("%d",&num3);
     //putting reference numbers into variables

     one = &num1;
     two = &num2;
     three = &num3;

   sortNums(one,two,three);

  printf("num1 %d\n",num1);
  printf("num2 %d\n",num2);
  printf("num3 %d\n",num3);


    getch();
    return 0;
        }
     //function   
    void sortNums(int *one,int *two, int *three)
    {
       int n1 = *one;
       int n2 = *two;
       int n3 = *three;



   if ((n1 > n2) && (n2 > n3)){
           *one = n3;
           *two = n2;
           *three = n1;
    }
    else if ((n1 > n2) &&(n2 < n3) ){
         *one = n2;
         *two = n3;
         *three = n1;
         }
    else {
         *one = n1;
         *two = n2;
         *three = n3;
              }    



    }

1 个答案:

答案 0 :(得分:0)

你缺少一些测试。

例如,在中间测试中,您不会检查n1是否大于n3或更小。例如,在中间添加if,可以对第二个最高值和最高值进行排序。

如果第一个数字大于第二个数字但小于第三个数字,您也错过了测试。

if ((n1 > n2) && (n2 > n3)){
    *one = n3;
    *two = n2;
    *three = n1;       
}
else if ((n1 > n2) &&(n2 < n3) ){
    if(n1 > n3) {
        *one = n2;
        *two = n3;
        *three = n1;
    } else {
        *one = n2;
        *two = n1;
        *three = n3;   
    }
} else if(n1 < n2) && (n2 > n3) {
        if(n1 > n3) {
            *one = n3;
            *two = n1;
            *three = n2;  
        } else {
            *one = n1;
            *two = n3;
            *three = n2;  
        }
} else {
    *one = n1;
    *two = n2;
    *three = n3;
}  

添加这些额外的if应该修复它。

如果需要,您也可以删除一些ifs,但是使用不同的if语句可以缩短代码。您还可以采取其他各种措施来改进代码。例如,您不需要从int创建指针然后发送它。你可以sortNums(&num1,&num2,&num3);