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] = '\0';
return i;
}
这个例子来自 K&R 关于 C 的书,第 1.9 章关于数组。我不明白的是为什么我们必须接受++i
内部if
声明?在外面写应该做同样的工作。
if(c=='\n')
s[i] = c;
++i;
s[i] = '\0'
return 0;
}
如果包含i
程序按预期工作,但在第二种情况下(我认为它应该做同样的工作,这就是我编辑该部分的原因)它没有。我通过调试器运行它并观察i
在这两种情况下都正确计算并返回。但是,如果不包含,程序仍然无法运行++i
。我没有从printf
语句中得到我的打印,而且 Ctrl+D 在终端或 XTerm 中不起作用(彻底的 CodeBlocks)我不知道为什么。请问有什么提示吗?我错过了一些合乎逻辑的步骤吗?这是一个完整的代码:
//Program that reads lines and prints the longest
/*----------------------------------------------------------------------------*/
#include <stdio.h>
#define MAXLINE 1000
int getline(char currentline[], int maxlinelenght);
void copy(char saveto[], char copyfrom[]);
/*----------------------------------------------------------------------------*/
int main(void)
{
int len, max;
char line[MAXLINE], longest[MAXLINE];
max = 0;
while( (len = getline(line, MAXLINE)) > 0 )
if(len > max){
max = len;
copy(longest, line);
}
if(max > 0)
printf("StrLength:%d\nString:%s", max, longest);
return 0;
}
/*----------------------------------------------------------------------------*/
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] = '\0';
return i;
}
/*----------------------------------------------------------------------------*/
void copy(char to[], char from[])
{
int i;
i = 0;
while( (to[i]=from[i]) != '\0')
++i;
}
/*----------------------------------------------------------------------------*/