打印最长行的程序
不知道为什么,运行时会出现结束程序的情况,求指教啊
#include <stdio.h>
#define MAXLINE 1000
int getline(char s[],int lim);
void copy(char to[],char from[]);
void main()
{
int max=0;
int len=0;
char maxline[MAXLINE];
char line[MAXLINE];//定义数组时,必须有数组界限
while(len=getline(line,MAXLINE)>max)
{
if(len>max){
copy(maxline,line);
max=len;
}
}
if(max>0)//存在这样的行
printf("%s",maxline);
}
//getline可以读取字符串和计算字符串的长度
int getline(char s[],int lim)
{
int i,c;
for(i=0;i<lim-1&&(c=getchar())!=EOF&&c!='\n';++i)//要有个最大长度限制lim
s[i]=c;
if(c=='\n')
{s[i]=c;//对于for语句算出i时不满足条件,此时i的值保留。故该语句可以直接用s【i】
++i;
}
if(c=='\0')
s[i]='\0';
return i;
}
void copy(char to[],char from[])
{
int i;
i=0;
while(to[i]=from[i]!='\0')//这个编的极好的,在判断条件中赋值,判断条件是\0
++i;
}
[解决办法]
有两个大的问题:
1、
if(c=='\0')
s[i]='\0';
LZ真以为键盘能输入'\0'?能直接输入'\0'还用设置个结束符^Z(EOF)干嘛……
2、基础中的基础:运算符优先级。
while((len=getline(line,MAXLINE))>max)
while((to[i]=from[i])!='\0')//这个编的极好的,在判断条件中赋值,判断条件是\0
[解决办法]
1 #include <stdio.h>
2
3 #define MAXLINE 1000
4
5 int getline1 (char s[], int lim);
6 void copy (char to[], char from[]);
7
8 int
9 main (void)
10 {
11 int max = 0;
12 int len = 0;
13 char maxline[MAXLINE];
14
15 char line[MAXLINE];
16 while ((len = getline1 (line, MAXLINE)) > max)
17 {
18 #if 0
19 if (len > max)
20 {
21 copy (maxline, line);
22 max = len;
23 }
24 #else
25 copy (maxline, line);
26 max = len;
27 #endif
28 }
29 if (max > 0)
30 printf ("%s", maxline);
31 return 0;
32 }
33
34 //getline可以读取字符串和计算字符串的长度
35 int
36 getline1 (char s[], int lim)
37 {
38 int i, c;
39 for (i = 0; i < lim - 1 && (c = getchar ()) != EOF && c != '\n'; ++i)
40 s[i] = c;
41 if (c == '\n')
42 {
43 s[i] = c;
44 ++i;
45 }
46 #if 1
47 s[i] = 0;
48 #else
49 if (c == '\0')
50 s[i] = '\0';
51 #endif
52 return i;
53 }
54
55 void
56 copy (char to[], char from[])
57 {
58 int i;
59 i = 0;
60 while ((to[i] = from[i]) != '\0')
61 ++i;
62 }
对你的程序作了一下小的修改,我想你是在windows下编写的该程序吧,我在linux下会报getline在库中已经定义了,所以我修改了你的函数名。
作为一个参考吧。
[解决办法]
仅供参考
#include <stdio.h>#include <string.h>#define MAXLEN 1000char ln[MAXLEN];FILE *f;int i,z;int b,n,L;int main(int argc,char **argv) { if (argc<2) { printf("Usage:%s fullpathfilename.ext\nget total blank/non-blank/total linenumbers.\n",argv[0]); return 1; } f=fopen(argv[1],"r"); if (NULL==f) { printf("Can not open file [%s]!\n",argv[1]); return 2; } z=0; b=0; n=0; L=0; while (1) { if (NULL==fgets(ln,MAXLEN,f)) break; L=strlen(ln); if ('\n'==ln[L-1]) { if (0==z) { for (i=0;i<L-1;i++) { if (!(' '==ln[i] || '\t'==ln[i])) break; } if (i<L-1) z=1;//当前行不是空行 } if (0==z) b++; else n++; z=0; } else { if (0==z) { for (i=0;i<L;i++) { if (!(' '==ln[i] || '\t'==ln[i])) break; } if (i<L) z=1;//当前行不是空行 } } } fclose(f); if (L>0 && '\n'!=ln[L-1]) { if (0==z) b++; else n++;//最后一行末尾无'\n'也计算 } printf("File:[%s] total blank/non-blank/total linenumbers is %d/%d/%d\n",argv[1],b,n,b+n); return 0;}