Zamiana wykrzyknika na dwa wykrzykniki

0

Cześć, mam problem za następującym zadankiem: "Korzystając z instrukcji if else, napisz program, który odczytuje dane wejściowe do znaku #, zastępuje każdą kropkę wykrzyknikiem, a każdy wykrzyknik dwoma wykrzyknikami, oraz wyświetla liczbę zamian jaką wykonał". No i mój kod wygląda jak na razie tak:

#include <stdio.h>
int main()
{
	char ch;
	int zam_kropek, zam_wykrz;
	zam_kropek = zam_wykrz = 0;

	while((ch = getchar()) != '#')
	{
		if(ch == '.')
		{
		ch = '!';
		zam_kropek++;
		}
			if(ch == '!')
			{
			//ch =  "!!"; //jak zrobić by zamienił ! na !!?
			zam_wykrz++;
			}
		putchar(ch);
	}
	printf("Zamieniono %d kropek, %d wykrzykników", zam_kropek, zam_wykrz);
	
	
	
	
	
	return 0;
}
 
1

Najbardziej prymitywne podejście:

if(ch == '.')
{
     ch = '!';
     zam_kropek++;
}
else if(ch == '!')
{
    zam_wykrz++;
    putchar(ch);
}

putchar(ch);

Słusznie @kq zauważył, że else się przyda.

0

Super, dzięki :) Jeszcze żeby wszystko się zgadzało, bo zamienia też kropki na 2 wykrzykniki to mała poprawka:

if(ch == '.')
{
     ch = '!';
     zam_kropek++;
}
if(ch == '!')
{
    zam_wykrz++;
    putchar(ch);
}
 
putchar(ch); 

Dzięki ;)

0

Super, dzięki :) Jeszcze żeby wszystko się zgadzało, bo zamienia też kropki na 2 wykrzykniki to mała poprawka:

 		if(ch == '.')
		{
		ch = '!';
		zam_kropek++;
		}
			else if(ch == '!')
			{		
			zam_wykrz++;
			putchar(ch);
			}
		putchar(ch);
	}

Dzięki ;) POPRZEDNIEGO POSTA USUNĄĆ, BO WKLEIŁEM TO SAMO.

1
if(ch == '.')
//...
else if(ch == '!')
//... 

Inaczej po zamianie kropki na wykrzyknik sprawdzasz, czy masz wykrzyknik (a masz, bo właśnie na niego zamieniłeś).

Przy okazji: słyszałeś o formatowaniu kodu? fatalnie się to czyta, czy tak nie ładniej?

if (ch == '.') {
    ch = '!';
    zam_kropek++;
} else if (ch == '!') {
    zam_wykrz++;
    putchar(ch);
}
putchar(ch);
0

Zależy dla kogo, dla mnie Twój kod jest nieczytelny...

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