c/c++开发分享getline()函数如何在这里工作?

我不明白函数getline是如何在这里工作的。 为什么换行字符被排除在for循环之外?为什么它在单独的块中测试换行符的存在?

 #include  #define MAXLINE 1000 /* maximum input line length */ int getline(char line[], int maxline); void copy(char to[], char from[]); /* print the longest input line */ main() { int len; /* current line length */ int max; /* maximum length seen so far */ char line[MAXLINE]; /* current input line */ char longest[MAXLINE]; /* longest line saved here */ max = 0; while ((len = getline(line, MAXLINE)) > 0) if (len > max) { max = len; copy(longest, line); } if (max > 0) /* there was a line */ printf("%s", longest); return 0; } /* getline: read a line into s, return length */ 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] = ''; return i; } /* copy: copy 'from' into 'to'; assume to is big enough */ void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '') ++i; } 

    getline将从stdin读取一行。 由于行由换行符( 'n'字符)分隔,因此getline将读取并包括换行符。 getline读取换行符是没有意义的,因为它会读取多行。

    有三种情况可能导致for循环停止。

    1)遇到了'n'
    如果发生这种情况,它会在添加空终止符之前将新行添加到当前字符串的末尾。 这就是if (c == 'n')的用途。

    2)读取EOF 3)读取要读取的最大字符数。
    如果发生这些中的任何一个,则跳过将换行添加到字符串末尾,并且仅添加空终止符。

    空终止符( ''字符)是C表示字符串结尾的方式。

    它们在循环中排除 n然后随后检查 n的原因是因为在完成for循环之后仍然分配了c的值(仍在范围内)。 一个看起来有点复杂的原因是他们决定排除括号。 由于函数是获取下一行,当你得到换行符“ n”时,一行将“结束”。 要写这个,所以它看起来更像是可读的:

     int getline(char s[],int lim) { int c, int 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] = ''; return i; } 

    我也想出了这个问题。 以下是您问题的可能答案。

    1)这个问题的第一个误解是getline本身。 特别是在此代码中,getline是用户定义的函数。 某些编译器可能会弹出错误。 所以尝试这个函数的另一个名字(也许getl或你觉得适合自己的东西)

    2)其次,main()充当接受输入字符串的中间体。 它检查输入字符串的长度(由函数getline()计算)是否大于零和最大值。

    3)复制function复制字符数组中最长字符串的值。

    打印代码时说:printf(“%s”,最长); 现在出现一个问题。 为什么不用for循环来打印字符串。 那也是正确的,但它需要更多的步骤和迭代,这是低效的。

    这就是我提出的。

    阅读直到一行结束时,有三个重要的案例需要考虑。 那些是:

    for循环中,以下内容:

    ...因为读取换行符需要短路的原因是因为这是函数的内涵。 它还会读取换行符并将其包含在字符串中。 最后一步:

     s[ i ] = ''; 

    ...确保它是一个以NULL结尾的字符串(C中的约定)。 然后它返回读取的字节数(这并不罕见)。

      以上就是c/c++开发分享getline()函数如何在这里工作?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/562367.html

      发表评论

      邮箱地址不会被公开。 必填项已用*标注