任务是从输入行的末尾删除空格和制表符,以保持行数。不能使用字符串库。我已经完成了我所能做的所有工作,仍然在输出文件中,在第一行的末尾有0920(使用八进制转储od -x trim.out)任何想法还有什么可能是错误的?尾行字尾仍然在第一行的末尾给出0920
#define LINELIM 1000
int getLine(char s[], int lim);
int main (void){
int len, i;
char line1[100];
while ((len = getLine(line1, LINELIM)) >0){
for (i=len-2; i>=0; i--){
if (line1[i] == ' ' || line1[i] == '\t' || line1[i] == '\n'){
// professor says it is always true for some reason
line1[i] = '\0';
}
else break;
}
if(line1[0]) // not a blank
printf(" %s\n", line1);
}
return 0;
}
/*getline: read a line into s, return length*/
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;
}
这是什么?使用'line1 [100]'',你正在传递'#define LINELIM 1000' ??? \ –
有时间学习如何使用调试器,因为那样你可以逐行浏览代码,看看会发生什么,并检查变量的值和表达式的结果。 –
我想建议你尝试一种不同的方法:首先 - 用'scanf'在一个步骤中读取整行,然后应用替换逻辑。第二 - 重写你的代码,它看起来很可怕并且不能真正维护(我保证你:在两天内你再也不会理解你的优点了)。第三 - 在你的代码中有一个巨大的错误,你可能会写出你的数组的边界 - 请参阅getLine函数的第三行。因此,重新思考问题/方法在这里会更好。 – ckruczek