簡體   English   中英

在K&R C編程語言中練習1-18

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM