gpt4 book ai didi

无法弄清楚为什么我得到奇怪的输出

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:28 24 4
gpt4 key购买 nike

我是新手。我一直在研究 K&R C 编程书,其中一个练习是编写一个程序来打印任何超过 80 行的输入行。这是我的代码:

include <stdio.h>

#define MAXLINE 1000

int getaline(char line[], int maxline);

int main()
{
int i, c;
char line[MAXLINE];

if ((c = getaline(line, MAXLINE)) > 80){
for (i =0; i < MAXLINE; ++i)
if (c != '\0')
printf("%c", line[i]);
printf("\n");
}
}
/* reads a line into S, returns the length of that line */
int getaline(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;
}

因此,我将通过管道将超过 80 个字符的行传递给已编译的程序。这是输出:

猫输入.txt | ./a.out

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111E11111111111111111111111111111ME??i?F???4?w??>&Y?_???xf?7U?h@???i??7U?v??i??7U??7U?(?7U?@?H??i?8?7U??7U?

它打印了这一行,但它给出了所有这些异常的输出。我试图找出原因,但我似乎无法找到原因。

但是,我很确定问题出在 getaline 函数上。

任何帮助将不胜感激! :)

最佳答案

您将 c 与当前字符混淆了。

试试这个,改变这个

for (i =0; i < MAXLINE; ++i)

for (i = 0 ; i < c ; ++i)

支票应该是

if (line[i] != '\0')

代替

if (c != '\0')

您的 getaline() 函数返回,i 读取的最后一个字符的位置,您正在将它与空终止字节进行比较。

此外,如果您以 null 终止字符串,为什么不直接

printf("%s\n", line);

这段代码应该可以工作

#include <stdio.h>

#define MAXLINE 1000

int getaline(char line[], int maxline);

int main()
{
int i, c;
char line[MAXLINE];

if ((c = getaline(line, MAXLINE)) > 80)
printf("%s\n", line);

return 0; // you must return from main()
}
/* reads a line into S, returns the length of that line */
int getaline(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;
}

关于无法弄清楚为什么我得到奇怪的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707601/

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