麻烦各位帮我看下我写的这个C代码有什么错误,谢谢了。
这是题目的要求然后调试的时候,就是这个错误,每一个函数都有。
我是初学者。。然后掌握的C语言只是还不是特别多。我再看C Primer Plus。然后作题的时候,出现的问题。我改了好多次,调试了好多次,都没有正确的结果。请大家帮我解决下,谢谢了!
补充:当我把第一个menu后面所有代码全部注释掉了以后,然后写上case 'a'的代码,结果是正常的,但是同样的代码到了case 'a'那里,就不正常了。我想应该是注释掉的那里有问题,但是我实在找不出问题在哪里。真的找不出了。刚刚想出来的这个检查的方法,其他三个选项还没有试。希望好心人能解答下我这个问题,谢谢了!!
程序代码:/* 读入若干字符串,并按格式输出 */
#include <stdio.h>
#include <string.h>
#define ROW 10 /* 最大限制字符串的数目 */
#define LINE 100
int getns (char *, int); /* 输入字符串的函数 */
void ascii (char **, int); /* 按照ASCII顺序的函数 */
void length (char **, int); /* 按长度递增顺序的函数 */
void first_length (char **, int); /* 按手单词长度递增顺序的函数 */
int first_strlen (char *); /* 比较首个单词长度的函数 */
void menu (void); /* 输出菜单选项的函数 */
int main (void)
{
char input[ROW][LINE];
char *ptrinput[ROW];
char choice;
int row = 0; /* 字符串的数目 */
puts ("Please enter a series of sentence.");
while (row < ROW && gets (input[row]))
{
if (*input[row] == EOF)
break;
ptrinput[row] = input[row];
row++;
} /* 将字符串赋予指针 */
menu ();
while ((choice = getchar ()) != 'q')
{
if (choice == '\n')
continue;
switch (choice)
{
case 'a':
{
int i;
for (i = 0; i < row; i++)
puts (ptrinput[i]);
}
case 'b': ascii (ptrinput, row);
case 'c': length (ptrinput, row);
case 'd': first_length (ptrinput, row);
}
if (choice != 'a' && choice != 'b' && choice != 'c' && choice != 'd')
puts ("Please enter a, b, c, d or q:");
menu ();
}
return 0;
}
/* 按照ASCII顺序的函数 */
void ascii (char ** p, int i)
{
int j, k, l;
char *output[ROW];
for (j = 0; j < i; j++)
{
l = 0;
for (k = 0; k < i; k++)
{
if (j == k)
continue;
if (strcmp (p[j], p[k]) >= 0)
l++;
}
output[l] = p[j];
}
for (l = 0; l < i; l++)
puts (output[l]);
}
/* 按长度递增顺序的函数 */
void length (char ** p, int i)
{
int j, k, l;
char *output[ROW];
for (j = 0; j < i; j++)
{
l = 0;
for (k = 0; k < i; k++)
{
if (k == j)
continue;
if (strlen (p[j]) > strlen (p[k]))
l++;
}
output[l] = p[j];
}
for (l = 0; l < i; l++)
puts (output[l]);
}
/* 按手单词长度递增顺序的函数 */
void first_length (char ** p, int i)
{
int j, k, l;
char *output[ROW];
for (j = 0; j < i; j++)
{
l = 0;
for (k = 0; k < i; k++)
{
if (k == j)
continue;
if (first_strlen (p[j]) > first_strlen (p[k]))
l++;
}
output[l] = p[l];
}
for (l = 0; l < i; l++)
puts (output[l]);
}
/* 比较首个单词长度的函数 */
int first_strlen (char * p)
{
int i = 0;
while (p[i] >= 'a' && p[i] <= 'z' || p[i] >= 'A' || p[i] <= 'Z')
i++;
return i;
}
/* 输出菜单选项的函数 */
void menu (void)
{
puts ("************************************************************************");
puts ("Please choose what to do:");
puts ("a. 输出初始字符列表 b. 按ASCII顺序输出字符串");
puts ("c. 按长度递增顺序输出字符串 d. 按字符串中第一个单词长度输出字符串");
puts ("q. Quit.");
puts ("************************************************************************");
}[ 本帖最后由 DarylL 于 2013-3-24 15:57 编辑 ]







所以才贴上来问的。
所以才贴上来问的。