Недавно я работал над упражнением из книги C K&R, в котором говорится: напишите программу для удаления конечных пробелов / вкладок из каждой строки ввода, 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 Спасибо за внимание, ребята! :)

-1
Daniel Stark 15 Апр 2016 в 19:23

2 ответа

Лучший ответ

+ Изменить

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

К

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

== - оператор равенства, а = - оператор присваивания.

1
nalzok 15 Апр 2016 в 16:25

Вы используете оператор сравнения == вместо оператора присваивания =.

1
Ouss4 15 Апр 2016 в 16:31