C-программа застряла в бесконечном цикле, как Nautre, но без печати каких-либо переменных - PullRequest
0 голосов
/ 28 июня 2018

Я пробую упражнение K & R 1-29 и, честно говоря, я в тупике от того, что делает моя программа. После ввода небольшого текстового файла с помощью gcc, программа работает вечно, как будто существует бесконечный цикл. Читая мои циклы снова, я не вижу никаких очевидных ошибок, поэтому я попытался напечатать разные переменные, чтобы увидеть, что происходит, но ничего не печаталось в командной строке - даже переменная i с самого первого цикла for, даже не один раз. Вот мой код:

#include <stdio.h>
#define tabStop 10
#define maxInput 1000

int main(){

int i, c, b;
int m, t = 0;
int index, index2;
char input[maxInput];
int nonBlank;

for (i = 0; i<maxInput-1 && (c=getchar()) != EOF; ++i){
    if (c != ' '){
        input[i] = c;
    }
    else {
        index = i; /*stores location in character array at start of blanks*/
        for (b = 0; c == ' '; ++b, ++i); /*counts the number of blanks (b) until the next non-blank character*/
        nonBlank = input[i]; /*saves the first seen non-blank character to be re-added later (as getchar() will have taken it in from input and will now stay at that point of the input)*/
        index2 = i; /*stores location in character array at end of blanks*/
        if (b >= tabStop){ /*if the tab space fits inside the number of blanks, otherwise there is nothing to be done*/
            while (t < b){
                t += tabStop;
                ++m;
                }
        for (int x = 0, i = index; i != index2 && x <= m; ++i, ++x){ /*loops over the number of tabs to be added starting from the first blank in the array found up until the first non-blank*/
                input[i] = '\t';
                }
            while (i != index2){ /*if i did not reach index2 before x surpassed m, there exist remaining spaces to be filled with blanks*/
                input[i] = ' ';
                ++i;
                }
            }
            input[i] = nonBlank; /*puts the first seen non-blank character into place, as getchar() has already covered it and so it wouldn't otherwise be added like other non-blanks*/
        }
    }

input[i] = '\0';

printf("%s", input);

return 0;

}

Вот введенный текстовый файл:

hello           there       world
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...