Program wyświetlający jedną spację.

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
oko3
Piegowaty Guziec
Piegowaty Guziec
Posty: 3
Rejestracja: 10 mar 2011, 23:16
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Program wyświetlający jedną spację.

Post autor: oko3 »

Witam, zacząłem uczyć się języka C z książki B.W. Kernighan, D. M. Ritchie "Język ANSI C". Dotarłem do programu, który podczas przepisywania z wejścia na wyjście będzie zastępować jednym znakiem odstępu każdy ciąg złożony z jednego lub więcej takich znaków. Z początku próbowałem stworzyć coś na podstawie programu do zliczania wierszy, ale po głębszym namyśle stwierdziłem, że nie tędy droga i stworzyłem coś takiego:

Kod: Zaznacz cały

#include <stdio.h>
main()
{
int c;

c=getchar();

while(c!=EOF)
{
putchar(c);
c=getchar();

if(c!=' ')
{
	putchar(c);
	c=getchar();
}

else 
	c=getchar();
}
}
No i tu się pojawia problem bo program nie działa poprawnie(raz wyświetla jedną spację, raz usuwa wszystkie, czasem połowę).
Moim zamiarem było aby po wczytaniu dowolnego znaku(oprócz EOF) program wyświetlił go(ponieważ ma wyświetlać wszystkie znaki no i jeśli to będzie jedna lub pierwsza z ciągu spacji to ją też powinien wyświetlić), a później w zależności od tego co dostanie: jak będzie to różne od spacji- wyświetlić i wczytać kolejny znak, a jeśli następna spacja to tylko wczytać kolejny znak.

Jak widać nie do końca wyszło i za bardzo nie wiem jak to zmienić.
Męczę się z tym jakiś czas. Z góry dzięki za pomoc i poświęcony mi czas.
Kokosek
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 108
Rejestracja: 04 mar 2009, 20:44
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Re: Program wyświetlający jedną spację.

Post autor: Kokosek »

Spróbuj przepisać kod w taki sposób, żeby tylko raz wywołać funkcję getchar oraz putchar.

Możesz zapamiętać poprzednio wpisany znak, żeby na podstawie informacji o aktualnym i poprzednim znaku podjąć decyzję.
bigfun
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 109
Rejestracja: 20 mar 2011, 19:08
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Warszawa
Kontakt:

Re: Program wyświetlający jedną spację.

Post autor: bigfun »

W twoim wypadku sytuacja wyjątkowa to pojawienie się białego znaku, więc to powinieneś potraktować ifem.

Przykładowy kod z komentarzem:

Kod: Zaznacz cały

#include <stdio.h>
int main()
{
char c; // typ char, bo to znaki.

while (1)
{
c=getchar();

if(c==' ' || c=='\n' ) // mamy bialy znak, wiec obslugujemy go wyjatkowo
{
   putchar(c); // jest to pierwszy bialy znak, wiec go wypisujemy
   do
   {
     c = getchar();
   } while (c==' ' || c=='\n'); //tak dlugo, jak po 1 bialym znaku nastepuja kolejne, tylko je wczytujemy
}
if (c==EOF) // warunek konca umieszczony wewnatrz powoduje, ze nie wypiszemy przypadkowo EOF na ekran 
  break;

putchar(c); // mamy normalny znak (nie bialy, ani nie EOF), wiec wypisujemy go na ekran
}
return 0; // funkcja main() zawsze powinna zwracac wartosc
}
"Never argue with idiot. He will drag you down to his level and then beat with experience."

Nie udzielam pomocy poza forum.
oko3
Piegowaty Guziec
Piegowaty Guziec
Posty: 3
Rejestracja: 10 mar 2011, 23:16
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Re: Program wyświetlający jedną spację.

Post autor: oko3 »

Kokosek pisze: Możesz zapamiętać poprzednio wpisany znak
Spoko tylko jak to zrobić?

Dzięki Bigfun, tak się jeszcze zastanawiam czy nie da się tego programu napisać z zastosowaniem tylko tej wiedzy, która została podana do tamtego momentu w książce(znaczy bez do while i breaka).
tommer
Piegowaty Guziec
Piegowaty Guziec
Posty: 4
Rejestracja: 30 sty 2011, 15:17
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Architektura: x86_64

Re: Program wyświetlający jedną spację.

Post autor: tommer »

Pamiętaj poprzedni znak. Wyświetl znak, gdy poprzedni i teraźniejszy jest różny od spacji. No i nie ma pętli do-while oraz breaka.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 15 gości