[英]Exercise 1-18 in K&R The C Programming Language
這項運動使我發瘋。 抱歉,如果我的編程問題似乎很少,但我是個初學者,所以請多多包涵。
該練習要求以下內容:編寫一個程序以從輸入的每一行中刪除結尾的空白和制表符,並刪除整個空白行。
誰能告訴我為什么我的代碼不起作用? 我還沒有解決完全空白行的問題,但是我找不到我的代碼不會刪除尾隨空白和制表符的任何原因。 這里是:
#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
請注意,預期輸出之后沒有空格。
但是,我得到的輸出是輸入的第一個字符的無限打印。
更新:當我從鍵盤上獲取輸入時,我的代碼可以按預期工作,但是當我從另一個文件中獲取輸入時,我仍然得到一個字符的重復。 我的想法很激動。
問題是您的代碼的這一部分:
while ((len = better_line_length(s, MAXLINE)) > 0) {
copy(better_s, s);
printf("%s\n", better_s);
}
無限迭代,因為(len = better_line_length(s, MAXLINE))
將始終大於0(對於具有至少1個字符的字符串)。
您不需要while
循環。 而是這樣做:
len = better_line_length(s, MAXLINE);
copy(better_s, s);
printf("%s|\n", better_s);
(還請注意,您在任何地方都不使用len
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.