回 帖 发 新 帖 刷新版面

主题:一对{}引发的错误“血案”


  #include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define A 5
main()
{
 char *s[]={"abc","ede","aef","esi","eil"};
 int i,k,j;
 char **p,*w;
   p=s;
 for(i=0;i<A-1;i++)/* 进行选择排序*/
  { k=i;
       for(j=i+1;j<A;j++) 

                if(strcmp(*(p+k),*(p+j))<0)
                 k=j;
                   if(k!=i)
                    {w=*(p+j);
                    *(p+k)=*(p+i);
                    *(p+i)=w;
                       }
        
          }
  for(i=0;i<A;i++)
  printf("%s\n",*(p+i));
          
getch();


这个程序的作用是在进行用指向指针的指针对5个字符串进行选择排序,但是现在的程序会出现,错误,就是在运行的时候,请看图片::::
如果我要是在if(strcmp(*(p+k),*(p+j))<0)
上面加一个{就是可以解决问题了。请各位讨论一下,这个为什么,啊,第二个for语句不是控制了这个过程了?为什么还要加一个{》?如果不加,岂不是也在执行for(j循环?

回复列表 (共1个回复)

沙发

真正的问题在这里
                   if(k!=i)
                    {w=*(p+j);//这里赋值号的右值偏移量不应该是j,应该是k
                    *(p+k)=*(p+i);
                    *(p+i)=w;
                       }
        

我来回复

您尚未登录,请登录后再回复。点此登录或注册