主题:[讨论]一道练习题求解
大家好,我刚开始自己学c语言一个礼拜,看的是 c程序设计语言,碰到一道题是要在已输入的文本行里找到最长的文本行,并打印,然后输出所有输入的文本行长度,并[color=#FF0000]竟可能多的打印出文本[/color],最后红色的部分我想把所有输入的文本行用all[]字符数组记录下来,然后打印,但是就是不成功,下面是我的代码,有没有高手帮我看看哪出问题了么,是不是逻辑运算符没有用对.谢谢
#include <stdio.h>
#define MAXLINE 60000
int getline(char line[], int maxline); /*函数用来一行一行读取文本行*/
void copy(char longest[], char line[]); /*保存目前最长文本行*/
void save(char all[], char line[]); /*保存所有输入文本行*/
main()
{
char line[MAXLINE];/*当前输入行字符数组 */
char longest[MAXLINE]; /*最长行字符数组*/
char all[MAXLINE]; /*所有当前输入行组成的数组*/
int leh[MAXLINE]; /*记录当前所有输入行大小的数组*/
int len, max, i, m; /*len 为当前输入行大小,max为当前输入的最长行大小*/
max = 0;
i = 0;
while ((len = getline(line, MAXLINE)) > 0) {
leh[i] = len; /*记录当前输入的所有行大小*/
++i;
if (len > max) { /*比较得出当前输入最长行*/
max = len;
save(all, line); /*用all数组储存所有已输入行*/
copy(longest, line); /*保存当前最长行为longest*/
}
}
if (max > 0) { /*若存在最长行,打印*/
for (m = 0; m < i; ++m) /*打印所有行大小*/
printf("%d\n", leh[m]);
/*打印出save 数组所有字符*/ /*必须找到连续两个空字符才跳出循环*/
for (m = 0; (all[m] != '\0') || (all[m + 1] != '\0'); ++m) {
if (all[m] == '\n')
printf("\n");
else if (all[m] == '\0')
;
else
printf("%c", all[m]);
}
printf("%s", longest);
}
return 0;
getchar();
}
int getline(char s[], int lim) /*一行行读取文本行函数*/
{
int c, i;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i )
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
void copy(char to[], char from[]) /*保存最长行函数*/
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}
void save(char tal[], char from[]) /*保存所有已输入行函数*/
{
int i, k;
i = 0;
k = 0;
while ((tal[i] != '\0') || (tal[i + 1] != '\0')) /*搜索tal中开始记录的地方*/
++i;
while ((tal[i + 1] = from[k]) != '\0') { /*记录 from[] 到 tal[]*/
++i;
++k;
}
}
#include <stdio.h>
#define MAXLINE 60000
int getline(char line[], int maxline); /*函数用来一行一行读取文本行*/
void copy(char longest[], char line[]); /*保存目前最长文本行*/
void save(char all[], char line[]); /*保存所有输入文本行*/
main()
{
char line[MAXLINE];/*当前输入行字符数组 */
char longest[MAXLINE]; /*最长行字符数组*/
char all[MAXLINE]; /*所有当前输入行组成的数组*/
int leh[MAXLINE]; /*记录当前所有输入行大小的数组*/
int len, max, i, m; /*len 为当前输入行大小,max为当前输入的最长行大小*/
max = 0;
i = 0;
while ((len = getline(line, MAXLINE)) > 0) {
leh[i] = len; /*记录当前输入的所有行大小*/
++i;
if (len > max) { /*比较得出当前输入最长行*/
max = len;
save(all, line); /*用all数组储存所有已输入行*/
copy(longest, line); /*保存当前最长行为longest*/
}
}
if (max > 0) { /*若存在最长行,打印*/
for (m = 0; m < i; ++m) /*打印所有行大小*/
printf("%d\n", leh[m]);
/*打印出save 数组所有字符*/ /*必须找到连续两个空字符才跳出循环*/
for (m = 0; (all[m] != '\0') || (all[m + 1] != '\0'); ++m) {
if (all[m] == '\n')
printf("\n");
else if (all[m] == '\0')
;
else
printf("%c", all[m]);
}
printf("%s", longest);
}
return 0;
getchar();
}
int getline(char s[], int lim) /*一行行读取文本行函数*/
{
int c, i;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i )
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
void copy(char to[], char from[]) /*保存最长行函数*/
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}
void save(char tal[], char from[]) /*保存所有已输入行函数*/
{
int i, k;
i = 0;
k = 0;
while ((tal[i] != '\0') || (tal[i + 1] != '\0')) /*搜索tal中开始记录的地方*/
++i;
while ((tal[i + 1] = from[k]) != '\0') { /*记录 from[] 到 tal[]*/
++i;
++k;
}
}