• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zliczanie liter

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
878 wizyt
pytanie zadane 5 maja 2019 w C i C++ przez DobryKurczak Bywalec (2,320 p.)

Witam.

Robię zliczacz liter, a mianowicie podaje napis i jaka litere ma sprawdzic, a funkcja zlicza ile jest tych liter. Oto, co już zrobiłem:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int ZliczIle(char* s, char c) {
	int liczbaz=0;
	for (int i = 0; s[i] != NULL;i++) {
		if (s[i] == c) 
			liczbaz++;
		
	}
	return liczbaz;
}

 void main() {

	 char napis[100];
	 char znak;
	 printf("Podaj dowolny ciag znakow");
	 scanf("%s", &napis);
	 printf("Podaj dowolny znak");
	 scanf("%c", &znak);
	 int liczba = ZliczIle(&napis, znak);
	 printf("Liczba znakow %c w ciagu znakow %s wynosi %d", napis, znak, liczba);
 }

 

Najbardziej mnie zastanawia, czy ta linijka jest poprawna:

		if (s[i] == c) 

Program wczytuje sie poprawnie, natomiast po podaniu napisu konsola sie "wiesza" i wyskakuje komunikat "Program przestał działać".

Z góry dziękuje za pomoc! :)

1 odpowiedź

+1 głos
odpowiedź 5 maja 2019 przez criss Mędrzec (172,570 p.)
wybrane 5 maja 2019 przez DobryKurczak
 
Najlepsza
Tak, wszystko jest ok. Jedynym błędem jest, że w 24 linii powinno być ZliczIle(napis, znak); (brak & przy "napis"). Właściwie, to nie wiem dlaczego to cię kompiluje w ogóle.
komentarz 5 maja 2019 przez DobryKurczak Bywalec (2,320 p.)
Nadal nie działa. :/
komentarz 5 maja 2019 przez criss Mędrzec (172,570 p.)
Zauważyłem kolejne: ta sama historia z & w scanf (linia 21).
I w 25 linii argumenty napis oraz znak masz w złej kolejności.
komentarz 5 maja 2019 przez DobryKurczak Bywalec (2,320 p.)
O tak, teraz juz lepiej, ale napotkalem inny problem. Otoz wpisuje dowolny ciag znakow, klikam enter i od razu mi przechodzi do wyniku, ile zliczylem wybranych liter, a ze nic nie podalem, to wyskakuje 0, choc nawet nie mialem jak podac tej litery. Czy wczytanie znaku przez scanf to dobry pomysl czy zastapic inna funkcja?
komentarz 5 maja 2019 przez criss Mędrzec (172,570 p.)

Ah, coś zostało w buforze stdin i jest czytane przy kolejnym scanf. Niestety obsługa inputu w c/c++ potrafi być strasznie irytująca... Umieść taki kod po pierwszym scanf (możesz też po każdym):

char c;
while((c = getchar()) != '\n' && c != EOF)
    /* discard */ ;

http://c-faq.com/stdio/stdinflush2.html

komentarz 5 maja 2019 przez DobryKurczak Bywalec (2,320 p.)
O dzięki, teraz elegancko działa jak należy! Ale przy tym ostatnim to bym chyba godzinami siedział i myślał, czemu to nie działa :P Wielkie dzięki!

Podobne pytania

0 głosów
2 odpowiedzi 1,394 wizyt
0 głosów
0 odpowiedzi 119 wizyt
pytanie zadane 10 grudnia 2021 w Inne języki przez Ok Nowicjusz (120 p.)
+1 głos
5 odpowiedzi 1,790 wizyt
pytanie zadane 20 maja 2015 w C i C++ przez Mateep Użytkownik (850 p.)

93,440 zapytań

142,431 odpowiedzi

322,679 komentarzy

62,802 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...