gpt4 book ai didi

c - 将一行读取到 s 上并返回其长度的函数是好习惯吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:39 25 4
gpt4 key购买 nike

K&R section 1.9 保存输入最长行的代码有以下功能:

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] = c;
return i;
}

然而,为了最佳实践,我了解到一个函数只做一件事。我相信此函数将其输入中的行复制到 s 的 char 数组中并返回长度。这不是考虑两件事吗?我认为这是一种不好的做法是否正确?

详细来说,我们确实使用了 getLine 函数的输入,但使用的是一种非常不直观的方式。

main() 
{
int len; /*current line length*/
int max; /*Current max line 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;
}


/*FUNCTION GETLINE TAKEN OUT */


/*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]) != '\0')
++i;

}

最佳答案

不,有两个原因。

第一个可能会争辩说 getline(顾名思义)的目的是从输入中读取一行。它也返回读取的字符数这一事实可以用 C 字符串的工作方式来解释,否则该函数不能用于读取包含空字节的数据。

第二个函数不包含任何额外的代码来计算长度。它是读取字符串的副产品。否则该函数将是 void 类型,因此返回字符串的长度确实没有任何缺点。

此外,编码指南本身并没有结束,但应该有助于生成好的代码。我看不出如何通过省略 return 语句并编写一个单独的 O(n) 函数来检索长度来改进这段代码。

关于c - 将一行读取到 s 上并返回其长度的函数是好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26555359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com