iT邦幫忙

0

寫了用qsort依照ASCll value排序所有字串的程式碼,但不知道為什麼它還沒有讀進所有字串就開始排序

  • 分享至 

  • xImage

我希望它讀進所以字串才開始排序,應該要怎樣修改才好?

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int compare(const void *prt1,const void *prt2){

return (strcmp((char *)prt1,(char *)prt2));

}

char str1[(int)1e5][103];

int main() {

int number_of_lines,i;

number_of_lines=0;

while(fgets(str1[number_of_lines],103,stdin)!=NULL){

    number_of_lines++;

    qsort(str1, number_of_lines, sizeof(char)*103,compare);

for( i=0;i<number_of_lines;i++)

    printf("%s",str1[i]);}

return 0;

}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2020-12-09 11:16:40
最佳解答

只要弄清楚「那一段要執行多次;那一段只要執行一次」就好

https://ithelp.ithome.com.tw/upload/images/20201209/2000178719qUFXr3Kv.png

https://ithelp.ithome.com.tw/upload/images/20201209/20001787pKmKKvLYYy.png

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

int compare(const void *prt1,const void *prt2){
    return (strcmp((char *)prt1,(char *)prt2));
}

char str1[(int)1e5][103];

int main() {
    int number_of_lines,i;
    number_of_lines=0;

    //讀進字串,多次
    while(fgets(str1[number_of_lines],103,stdin)!=NULL) {
        number_of_lines++;
    }
    
    //qsort,一次
    qsort(str1, number_of_lines, sizeof(char)*103,compare);
    
    //顯示結果,多次
    for( i=0;i<number_of_lines;i++)
        printf("%s",str1[i]);
    
    return 0;
}

我要發表回答

立即登入回答