Słowo w linii- sprawdzenie.

0

Program ma wypisywać każde słowo w nowej linii i znakiem rozdzielającym ma być spacja, znak tabulacji, albo nowej linii. Program działa dla tab i spacji, ale nie działa jak należy dla entera, dlaczego? ;/
Oto kod:

#include <stdio.h>
#include <ctype.h>
int main(void)
{
    char ch; 
    printf("Wpisz zdanie i zakoncz kropka.\n");
    while ((ch =getchar()) != '.')
    {   
      if (((int)(ch)) == 11 || ((int)(ch)) == 32 || ((int)(ch)) == 10) 
      printf("\n");
      else 
      printf("%c", ch);

      /*  alternatywnie

      if (isalpha(c))
      putchar(c);
      else if ( isspace(c))
      printf("\n");
      */

    }   
return 0;
}

(nie działa ani sposób w komentarzu, ani ten który jest bez komentarza)

0

Mi powyższy program nie działa dla TAB :) ASCII o numerze 11 to nie jest przypadkiem vertical tab?
Jak wyobrażasz sobie działanie dla Entera?:)

0

Masz rację, vertical.:) Będzie 9 zamiast 11.
Dla entera tak jak dla pozostałych, wyłapuje znak nowej linii, który ma numer 10 w ASCII i jeśli go wyłapie to
wypisuje "\n"

0

Nie wiem czy o to Ci chodziło, natomiast poniżej masz kod, który możesz sobie przejrzeć. Wyrzuciłem rzutowania, zmieniłem nieco pritnf(). Warto też zdawać sobie sprawę, że prototyp funkcji wygląda tak: int getchar(void);
Ale to już tylko taka ciekawostka :)

#include <stdio.h>

int main(void)
{
  int ch; 

  printf("Wpisz zdanie i zakoncz kropka.\n");
  while ((ch = getchar()) != '.')
  {   
    if (ch == '\t' || ch == 32 || ch == 10) 
      printf("\n");
    else 
      printf("[%c][%d]", ch, ch); 
  }   
  return 0;
}
0

Nie o to chodziło ;/ Program ma pobierać ciągi znaków rodzielone tab, spacją lub enterem i po wciśnięciu kropki wypisywać te słowa każde w nowej linii
np.
wpisuję:
Sialala la la
la.

a program wyrzuca:
Sialala
la
la
la

0

Rozumiem, że przeszkadza Ci teraz to, że program po wciśnięciu "entera" się wykonuje zamiast czekać aż do "kropki"?:)

0

Na tym polega zadanie, żeby nie wykonywał się po enterze, a dopiero po wciśnięciu kropki. Tak jak pokazałam to w przykładzie ;)

0

To musisz zmienić zupełnie podejście. W skrócie chodzi o to, że wejście jest buforowane. Moja pierwsza myśl - wykorzystać rozszerzenie języka w postaci getch().

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0