c - 删除尾随空格的程序不起作用! :(

标签 c kernighan-and-ritchie

最近我一直在做 K & R 的 C 书中的练习,其中指出:编写一个程序来删除每行输入中的尾随空白/制表符,bla bla bla。 我尝试了很多使用函数的方法,但都不起作用。所以我决定将所有内容都放在 main() 中,但它也不起作用!代码如下:

#include <stdio.h>
#define MAX_INPUT 100
#define ACTIVE 1 //quit with Ctrl + C

void main(){
    int i, nb, nt;
    char c;
    char line[MAX_INPUT];
    char corrected[MAX_INPUT];  

    while(ACTIVE){
        //get current line
        for(i = 0; i < MAX_INPUT - 1 && (c = getchar()) != EOF && c != '\n'; i++)
            line[i] = c;
        if(c == '\n'){
            line[i] = c;
        }
        line[i + 1] = '\0';

        //correct current line
        nb = nt = 0;
        for(i = 0; line[i] != '\0'; i++){
            if(line[i] == ' '){
                nb++;
                if(nb == 1)
                    corrected[i] == line[i];
            }

            else{
                if(line[i] == '\t'){
                    nt++;
                    if(nt == 1)
                        corrected[i] == line[i];
                }

                else
                    corrected[i] == line[i];
            }
        }
        corrected[i] == '\n';
        corrected[i + 1] == '\0';

        //print corrected line
        printf("%s", corrected);    
    }
}

因此,当我想打印当前行的“更正”版本时,它会打印以下内容:

我非常感谢您的帮助。我整个星期都在尝试这个,但我找不到错误,这让我发疯 xD 感谢各位的关注! :)

最佳答案

改变

corrected[i] == line[i];
corrected[i] == '\n';
corrected[i + 1] == '\0';

corrected[i] = line[i];
corrected[i] = '\n';
corrected[i + 1] = '\0';

== 是相等运算符,而 = 是赋值运算符。

关于c - 删除尾随空格的程序不起作用! :(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36652311/

相关文章:

C 正则表达式捕获组

字符数组 c k&r 第 1-17 本书

c - K&R 练习 1-18(C 编程语言)的意外输出

c - getword 中的段错误

c - K&R 1.19 练习 ("reverse"函数)

c - 我如何在 C 中进行这种巧妙的转换?

c 二进制文件大于源文件

c - 函数声明与原型(prototype)的替代 (K&R) C 语法

c - 为什么 C 和 Ruby 中负整数的模运算符 (%) 的行为不同?

c - 在客户端服务器程序中 fork 客户端