请教 各位大虾
我编了一段代码,用来输入指定个数的字符串,并对输入的字符串进行排序,源码如下:
#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个?
应该怎么改啊?
希望各位请教
----------------解决方案--------------------------------------------------------
请教 各位大虾
我编了一段代码,用来输入指定个数的字符串,并对输入的字符串进行排序,源码如下:
#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个?
应该怎么改啊?
希望各位请教
----------------解决方案--------------------------------------------------------
请教 各位大虾
我编了一段代码,用来输入指定个数的字符串,并对输入的字符串进行排序,源码如下:
#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个?
应该怎么改啊?
希望各位请教
加上那红色的地方就可以了!
作用是吸收第一次输入数字后按下的回车符!
----------------解决方案--------------------------------------------------------
懂了
谢谢楼上二位的解答
----------------解决方案--------------------------------------------------------
还有就是为什么输入单个字符串时不需要清缓存呢
除此之外,还有什么情况下需要清空缓存呢
----------------解决方案--------------------------------------------------------