标签:结束 std 超出 clu 字符 main oid 大于 检查
1 #include <stdio.h>
2 #define MAXLINE 1000 //允许输入行的最大长度
3
4 int get_Line(char line[], int maxline);
5 void copy(char to[], char from[]);
6
7 main()
8 {
9 int len; //当前行长度
10 int max; //目前为止发现的最长行的长度
11 char line[MAXLINE]; //当前的输入行
12 char longest[MAXLINE]; //用于保存最长的行
13
14 max = 0;
15 while ((len = get_Line(line, MAXLINE)) > 0)
16 printf("line‘s len %d , line: %s", len, line);
17 if(len > max)
18 {
19 max = len;
20 copy(longest, line);
21 }
22 if(max > 0)
23 printf("longest‘s len %d ,longest: %s\n", max, longest);
24 return 0;
25
26 }
27 // getline函数: 读一行读入到S中,并返回其长度
28 int get_Line(char s[], int lim)
29 {
30 int c, i, j;
31 j = 0;
32 for(i = 0; (c = getchar()) != EOF && c != ‘\n‘; ++i)
33 {
34 if(i < lim - 2)
35 {
36 s[j++] = c;
37 }
38 }//这里getline修改后,i可以大于lim的限制,只计数,不保存字符
39 if(c == ‘\n‘)
40 {
41
42 s[j++] = c;
43 ++i;
44 }
45 s[j] = ‘\0‘;
46 return i;
47 }
48
49 //copy 函数:将from复制到to;这里假定to足够大
50
51
52 void copy(char to[], char from[])
53 {
54 int i;
55 i = 0;
56 while ((to[i] = from[i]) != ‘\0‘)
57 ++i;
58 }
1.打印任意长度的输入行的长度 ,是指这个输入行的长度不受限制,循环语句 ,不再检查字符数是否超出数组s的限制,getline能返回任意长的输入行的长度并能存储尽可能多的输入行内容。
2.用于判断字符串数组是否还有空位置的表达式改成了 if(i < lim - 2) ,原因是 :数组s的最后一个小标是 lim-1 数组s中有lim个元素且我们已经读去了输入的字符。 i < lim -2 是将数组s里给换行符留个位置,即 s[lim - 2] = ‘\n‘;还要给字符串结束符留出一个位置,即s[lim -1] = ‘\0‘.
3.getline函数已包含在头文件stdio.h,需要更改一下函数名称
练习1-16 修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本。
标签:结束 std 超出 clu 字符 main oid 大于 检查
原文地址:https://www.cnblogs.com/liuhaiqing/p/12771751.html