| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 464 人关注过本帖
标题:[求教]字符串排序中的字符串输入问题
只看楼主 加入收藏
k_summer7
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-3-19
收藏
 问题点数:0 回复次数:4 
[求教]字符串排序中的字符串输入问题

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

#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个?
应该怎么改啊?

希望各位请教

搜索更多相关主题的帖子: 字符 输入 
2007-03-21 21:35
zerocn
Rank: 1
等 级:新手上路
帖 子:126
专家分:0
注 册:2006-4-11
收藏
得分:0 
以下是引用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个?
应该怎么改啊?

希望各位请教

2007-03-21 21:47
xianlin_lea
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2006-10-6
收藏
得分:0 
以下是引用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个?
应该怎么改啊?

希望各位请教

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

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


2007-03-21 21:48
k_summer7
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-3-19
收藏
得分:0 

懂了
谢谢楼上二位的解答

2007-03-21 23:14
k_summer7
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-3-19
收藏
得分:0 

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

2007-03-21 23:17
快速回复:[求教]字符串排序中的字符串输入问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.131825 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved