#include <stdio.h>
#include <stdlib.h>
typedef enum {false=0,true=1}bool;
#include <string.h>
#define BUFFER_LEN 100
#define NUM_P 5
char buffer[BUFFER_LEN];
char *pS[NUM_P]={NULL};
char *pTemp =NULL;
int i=0;
bool sorted=false ;
int last_string =0;
int main(void)
{
printf("\n Enter successive lines,pressing Enter at the \n\n\n\n ");
while ((*fgets(buffer,BUFFER_LEN,stdin)!='\n')&&(i<NUM_P))
{
pS[i]=(char*)malloc(strlen(buffer)+1);
if(pS[i]==NULL)
{
printf("Memory allocation failed.Program terminated.\n");
return 1;
}
strcpy(pS[i++],buffer);
}
last_string=i;
while(!sorted)
{
sorted=true;
for(i=0;i<last_string-1;i++)
{
if(strcmp(pS[i],pS[i+1])>0)
{
sorted=false;
pTemp=pS[i];
pS[i]=pS[i+1];
pS[i+1]=pTemp;
}
}
}
printf("\n You input sorted in order is:\n\n");
for(i=0;i<last_string;i++)
{
printf("%s\n",pS[i]);
free(pS[i]);
pS[i]=NULL;
}
system("pause");
return 0;
}
fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为:
char * fgets(char * string, int size, FILE * stream);
参数说明:
string为一个字符数组,用来保存读取到的字符。
size为要读取的字符的个数。如果该行字符数大于size-1,则读到 size-1 个字符时结束,并在最后补充' \0';如果该行字符数小于等于 size-1,则读取所有字符,并在最后补充 '\0'。即,每次最多读取 size-1 个字符。
stream为文件流指针。
【返回值】读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者ferror()函数来判断。
注意:fgets()与gets()不一样,不仅仅是因为gets()函数只有一个参数 FILE *stream,更重要的是,fgets()可以指定最大读取的字符串的个数,杜绝了gets()使用不当造成缓存溢出的问题。
#include <stdio.h>
#include <stdlib.h>
typedef enum {false=0,true=1}bool;
#include <string.h>
#define BUFFER_LEN 10
#define NUM_P 5
char buffer[BUFFER_LEN];
char *pS[NUM_P]={NULL};
char *pTemp =NULL;
int i=0;
bool sorted=false ;
int last_string =0;
int main(void)
{
printf("\n Enter successive lines,pressing Enter at the \n ");
while ((*fgets(buffer,BUFFER_LEN,stdin)!='\n')&&(i<NUM_P))//只要小于字符串长度,只要没有按下'\n',不断读取
{
pS[i]=(char*)malloc(strlen(buffer)+1);//开内存,个数需要加一,因为要存'\0'
if(pS[i]==NULL)
{
printf("Memory allocation failed.Program terminated.\n");
return 1;
}
strcpy(pS[i++],buffer);//复制到新内存
}
last_string=i;//记录最后一个字符串的索引??
while(!sorted)//冒泡排序,这里仅仅交换指针,内存还是在各自内存里
{
sorted=true;
for(i=0;i<last_string-1;i++)
{
if(strcmp(pS[i],pS[i+1])>0)
{
pTemp=pS[i];
pS[i]=pS[i+1];
pS[i+1]=pTemp;
sorted=false;//作为交换完成标志,反正目的就是strcmp(pS[i],pS[i+1])<0
}
}
}
printf("\n You input sorted in order is:\n\n");
for(i=0;i<last_string;i++)
{
printf("%s\n",pS[i]);
free(pS[i]);
pS[i]=NULL;
}
system("pause");
return 0;
}