2015-09-20 48 views
-3

我需要从用户输入字符串并按照ascii值的升序排列它们。任何人都可以帮助我,我错了吗?我在歌厅错误尝试比较二维数组中字符串的升序ascii值

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

int sort(char[10][10]); 

main(int argc, char *argv[]) 
{ 
    int i,j,length,fun; 
    char c; 
    char a[10][10]; 
    printf("Please enter ten strings : \n"); 
    for(i=0;i<10;i++) 
    { 
    j=-1; 
    while(a[i][j]!='\n'&&j<10) 
    { 
     scanf("%c",&a[i][++j]); 
    } 
    a[i][j]='\0'; 
    } 

    for(i=0;i<10;i++) 
    { 
    printf("\n"); 
    for(j=0;j<10,a[i][j]!='\0';j++) 
    { 
     printf("a[%d][%d]=%c\n",i,j,a[i][j]); 
    } 
    } 
    fun=sort(a[10][10]); 
    return 0; 
} 

int sort(char s[10][10]) 
{ 
    int i,j; 
    char temp[10]; 
    for (i = 1; i < 10; i++) { 
    for (j = 1; j < 10; j++) { 
     if (strcmp(s[j - 1], s[j]) > 0) 
     { 
     strcpy(temp, s[j - 1]); 
     strcpy(s[j - 1], s[j]); 
     strcpy(s[j], temp); 
     } 
    } 
    } 
    printf("Sorted list(in ascending order is:"); 
    for(i=0;i<10;i++) 
    {  
    for(j=0;j<10,s[i][j]!='\0';j++) 
    { 
     printf("%c\n",s[i][j]); 
    } 
    } 
    return 0;  
} 
+3

“*我geting错误*” - **错误是什么**? –

回答

2

问题:

  1. 此:

    j=-1; 
    

    应该

    j = 0; 
    

    因为数组的下标从零开始,而不是-1。

  2. 此:

    while(a[i][j]!='\n'&&j<10) 
    

    应该是

    while(a[i][j] != '\n' && j < 9) 
    

    ,使得如果用户输入多于9个字符的NUL终止子不被写入一个无效的内存位置。

  3. 此:

    fun=sort(a[10][10]); 
    

    应该

    fun = sort(a); 
    

    ,因为你要在阵列发送到功能。