C语言字符串的输入,排序和输出,程序异常,花了小弟我很长时间,哪位高手能帮小弟我调试下,找出异常原因
C语言字符串的输入,排序和输出,程序错误,花了我很长时间,谁能帮我调试下,找出错误原因。
------解决思路----------------------
第二个while后面少了一个"{";导致程序有错,加个“{”吧。然后再调调看。
while(i < LIM) 后加"{".
------解决思路----------------------
修改如下:
//C Primer Plus
#include <stdio.h>
#include <string.h>
#define LIM 10
#define SIZE 81
void str_oriout (char *fstr[],int num);
void str_ascout (char *fstr[],int num);
void str_lenout (char *fstr[],int num);
void str_wordout (char *fstr[],int num);
int main (void)
{
char str[LIM][SIZE]; //char
char * ptstr[LIM];
char ch = 'N';
int i,j;
i = 0;
j = 0;
int is_EOF;
printf("Please enter 10 strings\n");
while (ch != 'Y')
{
while(i < LIM) //
gets(str[i]);
for(j = 0;j < strlen(str[i]);j++) //
{
if (str[i][j] == EOF)
{
is_EOF = 1;
break; //break
}
}
ptstr[i] = str[i];
i++;
if (is_EOF == 1)
break;
puts(str[i]);
puts(ptstr[i]);
}
str_oriout(ptstr,i);
str_ascout(ptstr,i);
str_lenout(ptstr,i);
str_wordout(ptstr,i);
printf("Enter 'Y' to get out!\n");
ch = getchar();
getchar();
}
return 0;
}
void str_oriout (char *fstr[],int num) //
{
int ct = 0;
for (ct = 0;ct < num;ct++)
puts(fstr[ct]);
}
void str_ascout (char *fstr[],int num) //
{
char *temp;
int top,seek;
for (top = 0;top < num - 1;top++)
for (seek = top + 1;seek < num;seek++)
if (strcmp(fstr[top],fstr[seek]) > 0)
{
temp = fstr[seek];
fstr[seek] = fstr[top];
fstr[top] = temp;
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
void str_lenout (char *fstr[],int num)
{
char *temp;
int top,seek;
for (top = 0; top < num-1; top++)
for (seek = top + 1; seek < num; seek++)
if (strlen(fstr[top]) < strlen(fstr[seek]))
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
void str_wordout (char *fstr[],int num) //
{
char *temp;
int top,seek;
for (top = 0; top < num-1; top++)
for (seek = top + 1; seek < num; seek++)
{
int i,j;
int count1,count2;
i = j = 0;
count1 = count2 = 1;
while (fstr[top][i] != '\0')
{count1++;
i++;}
while (fstr[seek][j] != '\0')
{count2++;
j++;}
if (count1 < count2)
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
}
for (top = 0;top < num;top++)
puts(fstr[top]);
}
------解决思路----------------------
第二个while后面少了一个"{";导致程序有错,加个“{”吧。然后再调调看。
while(i < LIM) 后加"{".
------解决思路----------------------
修改如下:
//第11章第10题 //C Primer Plus
//输入10个字符串,按不同要求排序输出
#include <stdio.h>
#include <string.h>
#define LIM 10
#define SIZE 81
void str_oriout(char *fstr[], int num);
void str_ascout(char *fstr[], int num);
void str_lenout(char *fstr[], int num);
void str_wordout(char *fstr[], int num);
int main(void)
{
char str[LIM][SIZE]; //char *str[LIM] ,输入存在问题,一次只能输入一行
char * ptstr[LIM]; //注意声明!!
char ch = 'N';
int i, j;
i = 0;
j = 0;
int is_EOF;
printf("Please enter 10 strings\n");
while (ch != 'Y')
{
while (i < LIM) //输入10个字符串或遇到EOF结束
{
gets(str[i]);
ptstr[i] = str[i];
for (j = 0; j < strlen(str[i]); j++) //遇到EOF停止
{
if (ptstr[i][j] == EOF)
{
is_EOF = 1;
break; //break
}
}
if (is_EOF == 1)
break;
puts(str[i]);
printf("******1\n"); //检查作用
puts(ptstr[i]);
printf("******2\n");
i++;
}
str_oriout(ptstr, i);
str_ascout(ptstr, i);
str_lenout(ptstr, i);
str_wordout(ptstr, i);
printf("Enter 'Y' to get out!\n");
ch = getchar();
getchar();
}
return 0;
}
void str_oriout(char *fstr[], int num) //输出初始字符串
{
printf("******1\n");
int ct = 0;
for (ct = 0; ct < num; ct++)
puts(fstr[ct]);
}
void str_ascout(char *fstr[], int num) //按首字母ASCII值的顺序输出字符串
{
printf("******2\n");
char *temp;
int top, seek;
for (top = 0; top < num - 1; top++)
for (seek = top + 1; seek < num; seek++)
if (strcmp(fstr[top], fstr[seek]) > 0)
{
temp = fstr[seek];
fstr[seek] = fstr[top];
fstr[top] = temp;
}
for (top = 0; top < num; top++)
puts(fstr[top]);
}
void str_lenout(char *fstr[], int num) //按数组长度排序
{
printf("******3\n");
char *temp;
int top, seek;
for (top = 0; top < num - 1; top++)
for (seek = top + 1; seek < num; seek++)
if (strlen(fstr[top]) < strlen(fstr[seek]))
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
for (top = 0; top < num; top++)
puts(fstr[top]);
}
void str_wordout(char *fstr[], int num) //按第一个单词的长度排序
{
printf("******4\n");
char *temp;
int top, seek;
for (top = 0; top < num - 1; top++)
for (seek = top + 1; seek < num; seek++)
{
int i, j;
int count1, count2;
i = j = 0;
count1 = count2 = 1;
while (fstr[top][i] != '\0')
{
count1++;
i++;
}
while (fstr[seek][j] != '\0')
{
count2++;
j++;
}
if (count1 < count2)
{
temp = fstr[top];
fstr[top] = fstr[seek];
fstr[seek] = temp;
}
}
for (top = 0; top < num; top++)
puts(fstr[top]);
}