一个关于字符串数组的有关问题 望一下

一个关于字符串数组的问题 望高手指点一下
编写一个程序,接收用户输入的字符串,最多10个,
要求:将这个字符串数组的元素进行排序后输出,用户可选择升序和降序
还有就是,当用户输入“!”时,结束接收,以下这个是我自己写的,有点问题还不太明白:
#include <stdio.h>
#include <string.h>
int   count   =   0   ;
void   main()
{
        char   ch[10][20];//定义的字符串数组,存放用户输入的字符串
        int   i,j,k,r;
        char   temp[20];//这是排序时要用到的中间变量,顺便问一下,这个中间变量可
                                    //以这样定义吗??     char   temp;     个人认为是不行的
                                    //因为存放的是字符串,
        for(i=0;i <10;i++)
        {
                printf( "请输入第%d串字符串: ",i+1);
                fflush(stdin);
                gets(ch[i]);
                if(strcmp(ch[i], "! ")==0)
                {
                        break;
                }
                count++;
        }
        printf( "请选择排序方式 <1:升序2:降序> : ");
        fflush(stdin);
        scanf( "%d ",&k);
        if(k==1)
        {
                for(i=0;i <count-1;i++)
                {
                        for(j=i+1;j <count;j++)
                        {
                                r   =   stricmp(ch[i],ch[j]);//我有点搞不懂这个stricmp()函数  
                                if(r <0)                                    
                                {
                                        strcpy(temp,ch[i]);
                                        strcpy(ch[i],ch[j]);
                                        strcpy(ch[j],temp);
                                }
                        }
                }
        }
        else
        {