gpt4 book ai didi

c - Ex 1-17 无限循环

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

我正在通过 K & R 学习 C,我尝试为 Ex 1-17 编写程序,它应该打印字符数大于 80 的行。书面代码适用于字符数小于 80 的行,但对于字符数大于 80 的行超过 80 个字符我的编译器在运行时挂起。这就是我提供输入的方式 - 我随机输入了 80 多个字符,最后按下 enter,我的编译器挂起,我必须强制终止它。我在 Windows XP 上使用 Turbo c++ v4.5我的问题是为什么我的编译器在按下回车键后挂起?请帮我解决这个问题。

#include<stdio.h>
/* Program to print lines having length more than 80 chars */

#define MAX 80
#define MAXSIZE 1000

int getline( char a[], int b );
void copy ( char to[], char from[] );

main()
{
int len1, len2;
char line [ MAXSIZE ];
char longest [ MAXSIZE ];

len1 = len2 = 0;

while( ( len1 = getline( line , MAXSIZE ) ) > 0 ) /* Check if there is a line */
{
if( len1 > MAX && len1 > len2 )
{
len2 = len1;
copy( longest, line );
}
}

if( len2 > MAX )
printf("%s", longest);

return 0;
}

int getline( char a[], int b )
{
int i, c;

for( i = 0; i < b - 1 && ( c = getchar() ) != EOF && c != '\n'; ++i )
a [ i ] = c;
if( c == '\n' )
{ /* In this section for loop is must the only way to insert \n and \0 in an array remember this method */
a [ i ] = '\n' ;
++i;
}

a [ i ] = '\0';
return i;
}

void copy( char to[], char from[] ) /* For Copying a longest line */
{
int i = 0;
while( ( to[ i ] = from [ i ] ) != '\0' );
++i;
}

最佳答案

你得到了无限循环,因为在你的函数中 void copy( char to[], char from[] ) 你有

  while( ( to[ i ] = from [ i ] ) != '\0' );          
++i;

你在 while 循环后留下了一个分号。删除它,这将停止无限循环。

由于分号,++i 不是 while 循环的一部分,因此 i 的值永远不会递增。那是你的代码的问题。

另请注意,main() 应为 int main(void)int main(int argc, char *argv[])因为那是标准。在 TurboC++ 上,您可能不需要指定 main() 的返回类型,但 c 标准明确规定 main() 必须返回一个类型。引用What should main() return in C and C++?

另外请注意,正如@timrau 在他的评论中指出的那样,您将继续阅读输入,直到遇到 EOF,为此,您必须按 Ctrl + Z。否则,它只会继续要求输入(而您仅当您输入超过 80 个字符的字符串时才会得到输出)。

关于c - Ex 1-17 无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29327225/

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