任務是從輸入行的末尾刪除空格和製表符,以保持行數。不能使用字符串庫。我已經完成了我所能做的所有工作,仍然在輸出文件中,在第一行的末尾有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