Уменьшение пространства в C - PullRequest
0 голосов
/ 26 февраля 2019

У меня проблема с задачей, которая говорит: «переписать введенный текст и уменьшить количество пробелов до одного пробела».Программа, которую я написал, переписывает отдельные слова, но полностью перестает работать после ввода одного пробела.

 #include <stdio.h>
int main()
{
    int t,c,state;
    state=1;
    while((c=getchar())!=EOF)
    {
        if(c==' ') 
            state=0;
        if (state==0)
        {
            while(c=' ')
                state=0;
            putchar(' ');
            putchar(c);
            state=1;
        }
        else putchar(c);
    }
}

1 Ответ

0 голосов
/ 26 февраля 2019

Ваш код неверный.Вы пытались создать машину, которая в принципе является правильным подходом, но вы потерпели неудачу, потому что в этих строках есть две проблемы:

while(c=' ')
  state=0;

Сначала вы наверняка хотели написать while(c == ' '), и ваш компилятор, вероятно,предупреждал вас об этом.

Но даже это неправильно:

while(c == ' ')
  state=0;

Этот цикл никогда не завершится, если условие c == ' ' выполнено.

Что вам нужноэто:

#include <stdio.h>

int main(void) {
  int c;
  int spaceread = 1;

  while ((c = getchar()) != EOF) {
    if (c != ' ')
      spaceread = 0;   // something else than space => process normally
    else
    {
      // space char has been read

      if (spaceread)   // if a space has been read previously => do nothing,
        continue;      // just continue to read the next character.

      spaceread = 1;   // remember we've read a space
    }

    putchar(c);        // print character
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...