我正在通过K& K学习C语言R.我已经达到 1.10外部变量和范围。
在该部分中,他们编写并解释了有关外部变量及其范围的程序。我自己键入了该代码并尝试执行它。它不显示任何运行时或编译时错误。但是,它也不打印任何输出,这应该是来自给定输入的最长行。我调试了程序,发现程序正在跳过'printf()'语句。我尝试了 sublime text 2 + gcc和Turbo c ++ v4.5 ,但我仍然没有得到输出。我正在使用Windows xpsp 3.
这是我的代码:
#include<stdio.h>
/* program to pring longest line using external variables */
#define MAXSIZE 1000
int max;
char line[ MAXSIZE ];
char longest[ MAXSIZE ];
int getline( void );
void copy( void );
main()
{
int len;
extern int max;
extern char longest[];
max = 0;
while( ( len = getline() ) > 0 )
{
if( len > max )
{
len = max;
copy();
}
}
if( max > 0)
printf("\n%s\n", longest); /* This line is skipped */
return 0;
}
int getline( void ) /* Check if there is line */
{
int c, i;
extern char line[];
for( i = 0; i < MAXSIZE -1 && ( c = getchar()) != EOF && c != '\n'; ++i )
line[ i ] = c;
if( c == '\n' )
{
line[ i ] = c;
++i;
}
line[ i ] = '\0';
return i;
}
void copy( void ) /* copy current line to longest if it is long */
{
int i = 0;
extern char line[];
extern char longest[];
while( ( longest[ i ] = line[ i ] ) != '\0' )
++i;
}
所以我的问题是:
为什么会这样?
我该怎么办才能使程序不会跳过'printf()'并输出输出?
请帮忙。谢谢。
答案 0 :(得分:0)
此代码的意图是从零开始max
,然后,对于比当前max
更长的每一行,复制该行并更新max
更长的价值:
max = 0;
while( ( len = getline() ) > 0 )
{
if( len > max )
{
len = max;
copy();
}
}
但是,应该更新max
的行正在指向错误的方向。它将len
设置为max
的当前值,永远不会更新 max
。这是一个显而易见的“调试101”,在调用copy()
之后放置以下行:
printf ("New long line, len = %d, str = '%s'\n", max, longest);
你永远不会看到长度变化的事实会(希望)很快缩小问题的范围。相关的行应该是:
max = len;