排序问题??
这个是自己写的输入三个数字排序的问题,可以得到答案,但是每次在答案后面都会加了个Null pointer assignment,是什么原因呢?请高手解释一下```
#include "stdio.h "
main()
{int a,b,c,i ;
int *p,*q,*s ,*tmp;
tmp=NULL;
p=&a;q=&b;s=&c;
printf( "please input three int nums:\t ");
scanf( "%d,%d,%d ",&a,&b,&c);
if(*p> *q) { *tmp=*p;*p=*q;*q=*tmp;
if(*q> *s) {* tmp=*q;*q=*s;*s=*tmp;
if(*p> *q) { *tmp=*p;*p=*q;*q=*tmp;}
}}
else if(*q> *s) { *tmp=*q;*q=*s;*s=*tmp;
if(*p> *q) { *tmp=*p;*p=*q;*q=*tmp;}}
printf( "%d,%d,%d ",a,b,c);
[解决办法]
第一,注意程序格式.你自己看着不累吗?
第二, *p=*q合法,因为p q初始化为变量的地址. 但*tmp=*p不合法,因为tmp没有合法的指向.
第三, 就算题目限定了给三个变量排序,也最好写成通用的给X个变量排序.
[解决办法]
你的程序中把“tmp = NULL”去掉就可以运行了,原因我不知道。
你写的有点多了,这个程序好象就行了
#include "stdio.h "
main()
{int a,b,c,i ;
int *p,*q,*s ,*tmp;
p=&a;q=&b;s=&c;
printf( "please input three int nums:\t ");
scanf( "%d,%d,%d ",&a,&b,&c);
if(*p> *q)
{*tmp=*p;*p=*q;*q=*tmp;}
if(*p> *s)
{*tmp=*p;*p=*s;*s=*tmp;}
if (*q > *s)
{*tmp = *q; *q = *s; *s = *tmp;}
printf( "%d,%d,%d ",a,b,c);
}