【发布时间】:2016-03-15 20:07:29
【问题描述】:
所以我尝试编写代码:主要获取输入三个数字,然后将这些数字的指针发送到需要在它们之间交换的函数,直到我们得到我们想要的。我们希望在代码\函数的末尾,最大的数字在 num1,第二大的数字在 num2,最小的数字在 num3。请帮我指点。该函数打印一些垃圾值。
#include <stdio.h>
#include <stdlib.h>
void whichIsBigger(int* num1, int* num2, int* num3);
void swap(int* num1, int* num2);
void printsAnswer(int* num1, int* num2, int* num3);
int main(void)
{
int num1, num2, num3;
int* pnum1 = &num1;
int* pnum2 = &num2;
int* pnum3 = &num3;
printf("Please enter three number\n");
scanf("%d %d %d",&num1,&num2,&num3);
whichIsBigger(pnum1, pnum2, pnum3);
system("PAUSE");
return 0;
}
/*
*/
void whichIsBigger(int* num1, int* num2, int* num3)
{
if ((*num3 > *num1) && (*num3 > *num2))
{
if (*num1 > *num2)
{
swap(&num1, &num2);
}
}
else if ((*num2>*num1) && (*num2>*num3))
{
swap(&num2, &num3);
if (*num1 > *num2)
{
swap(&num1, &num2);
}
}
else if ((*num1 > *num2) && (*num1 > *num3))
{
swap(&num1, &num3);
if (*num1 > *num2)
{
swap(&num1, &num2);
}
}
printsAnswer(&num1, &num2, &num3);
}
/*
*/
void swap(int* num1, int* num2)
{
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
/*
*/
void printsAnswer(int* num1, int* num2, int* num3)
{
printf("the biggest number is: %d\n", *num1);
printf("the second biggest number is: %d\n", *num2);
printf("the smallest number is: %d\n", *num3);
}
【问题讨论】:
-
尝试在打开警告的情况下编译它,你会学到一些有价值的东西:) 例如
gcc -Wall your_file.c主要问题是你传递的是指向指针而不是指针的指针。 -
你为什么使用 swap 作为 swap(&num1,&num2) 而不是 swap(num1,num2) ?它已经是一个指针
-
附带说明 whichIsBigger 函数似乎给出了相反的结果(将最小的数字显示为最大的数字等)