這個練習讓我發瘋。對不起,如果我的編程問題看起來很小,但我是初學者,所以請耐心等待。K&R練習1-18 C語言編程
練習請求以下內容: 編寫程序以刪除每行輸入中的尾隨空白和製表符,並刪除完全空白的行。
有人可以告訴我爲什麼我的代碼不起作用嗎?我還沒有解決完全空白行的問題,但我找不到任何理由說明爲什麼我的代碼不會刪除尾隨空白和製表符。那就是:
#include <stdio.h>
#define MAXLINE 1000
int better_line_length(char line[], int lim);
void copy(char to[], char from[]);
int main(void)
{
int len;
char s[MAXLINE];
char better_s[MAXLINE];
while ((len = better_line_length(s, MAXLINE)) > 0) {
copy(better_s, s);
printf("%s\n", better_s);
}
return 0;
}
int better_line_length(char s[], int lim)
{
int c, i, last_letter;
for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) {
s[i] = c;
if (c != ' ' && c != '\t')
last_letter = i;
}
s[last_letter+1] = '\0';
return last_letter+1;
}
void copy(char to[], char from[])
{
int i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}
例如,我希望工作代碼如下:如果我的輸入是這樣的(其中「▯」表示空格):
abcdefg▯▯▯▯▯▯▯▯▯▯▯▯
我期望的輸出
abcdefg
請注意,預期輸出後沒有空格。
但是,我得到的輸出是輸入的第一個字符的無限打印。
更新:當我從鍵盤輸入輸入時,我的代碼按預期工作,但是當從另一個文件中輸入輸入時,仍然會重複輸入一個字符。我的心被炸燬了。
你有你的計算機上的調試器?一次運行您的代碼將顯示您出錯的位置。 – usr2564301 2014-11-22 23:52:04
問問你自己'last_letter'對於'last last \ _letter + 1'有什麼價值?'當你給這個輸入提供* none *的字符時,需要將'last_letter'設置爲* anything *? (空格和製表符)?請注意,它沒有初始值。一旦你解決了這個問題,你仍然處於熱水中,除非'last_letter + 1'在某種程度上等於零。 – WhozCraig 2014-11-23 00:04:10