当前位置: 代码迷 >> C语言 >> [求教]字符串排序中的字符串输入问题
  详细解决方案

[求教]字符串排序中的字符串输入问题

热度:207   发布时间:2007-03-21 21:35:38.0
[求教]字符串排序中的字符串输入问题

请教 各位大虾
我编了一段代码,用来输入指定个数的字符串,并对输入的字符串进行排序,源码如下:

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define MAXNUM 20 //最大字符串个数
#define MAXLEN 40 //单个字符串最大字符数

void stringCmp(char *, char *); //字符串比较并交换

void main()
{
char *pStr[MAXNUM];
int num;

printf("please input the num of string:\n");
scanf("%d",&num);
printf("please input the string of %d numbers:\n",num);
for(int i=0; i<num; i++)
{
pStr[i] = (char *)malloc(sizeof(char)*MAXLEN);
gets(pStr[i]);
}
printf("you input is:\n");
for(i=0; i<num; i++)
puts(pStr[i]);
for(i=0; i<num-1; i++)
for(int j=i; j<num; j++)
stringCmp(pStr[i],pStr[j]);
printf("after sort the strings are:\n");
for(i=0; i<num; i++)
puts(pStr[i]);
for(i=0; i<num; i++)
free(pStr[i]);
}

void stringCmp(char *str1, char *str2)
{
char tp[MAXLEN];
if(strcmp(str1,str2)>0)
{
strcpy(tp,str1);
strcpy(str1,str2);
strcpy(str2,tp);
}
}

程序能够编译通过,可以运行,也能实现排序;但就是在输出时出现问题:
比如要输入3个字符串(num = 3),但输入2个后程序就向下运行了;如:
Zhoujielun(回车)
Anzaixu(回车)

随后程序就开始向下运行,输出的第一行是空行,随后两行正常输出刚才输入的字符串,即

(空行)
Zhoujielun(回车)
Anzaixu(回车)
随后的排序能正常,只是排序后首行仍然是空行!
请问这是为何?
为什么想要输入3个字符串,却只是能输入2个?
应该怎么改啊?

希望各位请教

搜索更多相关的解决方案: 字符  输入  

----------------解决方案--------------------------------------------------------
以下是引用k_summer7在2007-3-21 21:35:38的发言:

请教 各位大虾
我编了一段代码,用来输入指定个数的字符串,并对输入的字符串进行排序,源码如下:

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define MAXNUM 20 //最大字符串个数
#define MAXLEN 40 //单个字符串最大字符数

void stringCmp(char *, char *); //字符串比较并交换

void main()
{
char *pStr[MAXNUM];
int num;

printf("please input the num of string:\n");
scanf("%d",&num);
printf("please input the string of %d numbers:\n",num);
for(int i=0; i<num; i++)
{
pStr[i] = (char *)malloc(sizeof(char)*MAXLEN);
fflush(stdin);调试sanf和gets试要清空缓存
gets(pStr[i]);
}
printf("you input is:\n");
for(i=0; i<num; i++)
puts(pStr[i]);
for(i=0; i<num-1; i++)
for(int j=i; j<num; j++)
stringCmp(pStr[i],pStr[j]);
printf("after sort the strings are:\n");
for(i=0; i<num; i++)
puts(pStr[i]);
for(i=0; i<num; i++)
free(pStr[i]);
}

void stringCmp(char *str1, char *str2)
{
char tp[MAXLEN];
if(strcmp(str1,str2)>0)
{
strcpy(tp,str1);
strcpy(str1,str2);
strcpy(str2,tp);
}
}

程序能够编译通过,可以运行,也能实现排序;但就是在输出时出现问题:
比如要输入3个字符串(num = 3),但输入2个后程序就向下运行了;如:
Zhoujielun(回车)
Anzaixu(回车)

随后程序就开始向下运行,输出的第一行是空行,随后两行正常输出刚才输入的字符串,即

(空行)
Zhoujielun(回车)
Anzaixu(回车)
随后的排序能正常,只是排序后首行仍然是空行!
请问这是为何?
为什么想要输入3个字符串,却只是能输入2个?
应该怎么改啊?

希望各位请教


----------------解决方案--------------------------------------------------------

以下是引用k_summer7在2007-3-21 21:35:38的发言:

请教 各位大虾
我编了一段代码,用来输入指定个数的字符串,并对输入的字符串进行排序,源码如下:

#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define MAXNUM 20 //最大字符串个数
#define MAXLEN 40 //单个字符串最大字符数

void stringCmp(char *, char *); //字符串比较并交换

void main()
{
char *pStr[MAXNUM];
int num;

printf("please input the num of string:\n");
scanf("%d",&num);

getchar();

printf("please input the string of %d numbers:\n",num);
for(int i=0; i<num; i++)
{
pStr[i] = (char *)malloc(sizeof(char)*MAXLEN);
gets(pStr[i]);
}
printf("you input is:\n");
for(i=0; i<num; i++)
puts(pStr[i]);
for(i=0; i<num-1; i++)
for(int j=i; j<num; j++)
stringCmp(pStr[i],pStr[j]);
printf("after sort the strings are:\n");
for(i=0; i<num; i++)
puts(pStr[i]);
for(i=0; i<num; i++)
free(pStr[i]);
}

void stringCmp(char *str1, char *str2)
{
char tp[MAXLEN];
if(strcmp(str1,str2)>0)
{
strcpy(tp,str1);
strcpy(str1,str2);
strcpy(str2,tp);
}
}

程序能够编译通过,可以运行,也能实现排序;但就是在输出时出现问题:
比如要输入3个字符串(num = 3),但输入2个后程序就向下运行了;如:
Zhoujielun(回车)
Anzaixu(回车)

随后程序就开始向下运行,输出的第一行是空行,随后两行正常输出刚才输入的字符串,即

(空行)
Zhoujielun(回车)
Anzaixu(回车)
随后的排序能正常,只是排序后首行仍然是空行!
请问这是为何?
为什么想要输入3个字符串,却只是能输入2个?
应该怎么改啊?

希望各位请教

加上那红色的地方就可以了!

作用是吸收第一次输入数字后按下的回车符!


----------------解决方案--------------------------------------------------------

懂了
谢谢楼上二位的解答


----------------解决方案--------------------------------------------------------

还有就是为什么输入单个字符串时不需要清缓存呢
除此之外,还有什么情况下需要清空缓存呢


----------------解决方案--------------------------------------------------------
  相关解决方案