麻烦各位帮我看下我写的这个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 编辑 ]