2017-08-07 53 views
0

我是這個網站的新手,並且自學瞭如何用C編程。下面的代碼編譯時沒有警告或者錯誤並且執行,但是第二次打印運行和首先,即我的氣泡排序例程不起作用。這種使用單字母字符的類似版本工作得很好。任何指針(嗯...)將不勝感激我去哪裏錯了 - 謝謝!爲什麼我的冒泡排序在C中不起作用

代碼:

#include <stdio.h> 
#include <stdlib.h> 

int main() 

{ 

    char * names[10] = {"Dave","Al","Roger","Gary","Marc","Tim","Bob","Cal","Sid","Joe"}; 

    int beginning; 
    int end; 
    int didSwap; 
    char * temp = "This will be used to store names temporarily"; 
    int ctr; 

    puts("\nHere are some random names:"); 
    for (ctr = 0; ctr < 10; ctr++) 
    { 
     printf("%s\n", names[ctr]); 
    } 

    for (beginning = 0; beginning < 9; beginning++) 
    { 
     didSwap = 0; 
     for (end = beginning; end < 10; end++) 
     { 
      if (names[end] < names[beginning]) 
      { 
       temp = names[end]; 
       names[end] = names[beginning]; 
       names[beginning] = temp; 
       didSwap = 1; 
      } 
     } 
     if (didSwap == 0) 
      { 
       break; 
      } 
    } 

    puts("\nHere are the random names now in alphabetical order:"); 
    for (ctr = 0; ctr < 10; ctr++) 
    { 
     printf("%s\n", names[ctr]); 
    } 

    return(0); 
} 
+2

你做了什麼調試? – Carcigenicate

+1

對於字符串,使用'strcmp'而不是'<'。 – BLUEPIXY

+0

沒有,因爲沒有錯誤或警告顯示出來,否則我會陷入困境。我嘗試用許多不同的方式重寫(這會產生警告),但沒有運氣... –

回答

3

不能有效地與<比較字符串;您通常應該使用strcmp函數(除非您需要區分大小寫的排序,...)。在C中,這些字符串是內存地址,所以您按字符串的地址排序而不是它的值。

+0

是的,我越來越多地瞭解字符串 - 感謝您的意見。 –