标题:简单的字符排序程序,不知到怎样让它结束输入
只看楼主
大飞玩编程
Rank: 2
等 级:论坛游民
帖 子:21
专家分:12
注 册:2012-7-24
结帖率:100%
已结贴  问题点数:2 回复次数:25 
简单的字符排序程序,不知到怎样让它结束输入
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4 #define LEN_MAX 512
5 #define NLINES_MAX 1000
6 char *linePtr[NLINES_MAX];
7 /******* 比较函数,共qsort调用,返回值必须是int类型。自变量 *P1与*P2分别是被排序的两个指针。**/
8 int qcompare (const void *p1,const void *p2)
9 { return strcmp(*(char**)p1,*(char**)p2);
10 }
11
12 /***iiread date from stdin standard date flow function**/
13 char *getline()
14 {
15 char buffer[LEN_MAX],*linePtr =NULL;
16 if(fgets(buffer,LEN_MAX,stdin) != NULL)
17 {
18 size_t len = strlen (buffer);
19 if( buffer[len-1] == '\n')
20 buffer[len-1]= '\0';
21 else
22 ++len;
23 if((linePtr =malloc(len))!=NULL)
24 strcpy(linePtr,buffer);
25 }
26 return linePtr;
27 }
28 int main(void)

29 {int n=0;//读取多少行
30 for( ; n<NLINES_MAX && (linePtr[n] = getline())!=NULL;++n);
31 if(!feof(stdin))//遇到文件结束符
32 {
33 if(n==NLINES_MAX)
34 fputs("sorttext:too many lines.\n",stderr);
35 else
36 fputs("sorttext:error reading from stdin.\n",stderr);}
37 else //sort and putout to screen
38 {
39 qsort( linePtr,n,sizeof(char*),qcompare);
40 for(char **p = linePtr;p<linePtr+n;++p)
41 puts(*p);
42 }
43
44
45 return 0;
46
47 }
搜索更多相关主题的帖子: function include void standard 
2012-07-27 08:18
大飞玩编程
Rank: 2
等 级:论坛游民
帖 子:21
专家分:12
注 册:2012-7-24
得分:0 
linux下的GCC编译器。 运行之后 输入字符串。不知到怎样样让它结束 输入。 不然的话第三十行是 死循环 或者说 要输入1000行才结束。。。。
2012-07-27 08:19
大飞玩编程
Rank: 2
等 级:论坛游民
帖 子:21
专家分:12
注 册:2012-7-24
得分:0 
自顶
2012-07-27 08:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
请问你知道自己写的代码是什么意思吗?

授人以渔,不授人以鱼。
2012-07-27 13:05
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
得分:0 
唔 看完代码再看楼主问题是不是不会输入EOF了?
Windows下我试过是ctrl + z
Linux下没试过,查了下是ctrl + d

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-07-27 13:12
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
回复 5楼 LShang
不是,你看清楚30行调用的函数及其原型,那函数返回什么,而30行中接收的又是什么。他根本就不知道自己贴的代码是干什么的。自己都知道30行有问题,却不知道怎么看,这就是纯粹抄代码、敲代码不重视理论的结果。

[ 本帖最后由 TonyDeng 于 2012-7-27 13:16 编辑 ]

授人以渔,不授人以鱼。
2012-07-27 13:15
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
得分:0 
回复 6楼 TonyDeng
为char型指针数组中某个成员赋值了一个char型指针
看着没啥问题啊
难道运行时状况是不一样的?我去编译调下看看

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-07-27 13:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 

授人以渔,不授人以鱼。
2012-07-27 13:34
LShang
Rank: 4
来 自:China
等 级:业余侠客
威 望:3
帖 子:183
专家分:258
注 册:2010-12-24
得分:0 
回复 8楼 TonyDeng
看他的代码指针返回前也有申请空间的啊
基础没过关,居然找不到关键点,我跟踪看下执行过程。。。

学如逆水行舟,不进则退
士不可以不弘毅,任重而道远
2012-07-27 13:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
char *linePtr[NLINES_MAX];   这是什么?
char* getline(void);         这种函数原型,它怎么把“一行文本”返回给调用者?

以为在函数内部返回一个字符串指针就能把整个字符串送出去?就算不知道自己该怎么写getline(),起码也参考一下标准库函数gets()的原型是怎样的。是的,C++的System::Console::ReadLine()可以直接返回一行文本,但那个实现不是他这样return的呢。

[ 本帖最后由 TonyDeng 于 2012-7-27 13:46 编辑 ]

授人以渔,不授人以鱼。
2012-07-27 13:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-374197-1-1.html




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

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