Program usuwający wszystkie znaki c ze słowa s

0

Cześć! Napisałam program na dwa sposoby. Dlaczego pierwszy z nich działa, a drugi nie?

#include <stdio.h>
#include <string.h>

void squeeze(char s[], char p[], int c);

main(){

	char t[30], p[30];
	int a, i;

	printf("Podaj literke: ");
	scanf("%c", &a);
	printf("Podaj slowo: ");
	scanf("%s", t);
	squeeze(t, p, a);
	for(i=0; i<strlen(p); i++)
		printf("%c", p[i]);

	return 0;
}

// squeeze: usuń wszystkie znaki c z s

void squeeze(char s[], char p[], int c){

	int i, j = 0;

	for (i =  0; s[i] != '\0'; i++)
		if (s[i] != c)
			p[j++] = s[i];

	p[j] = '\0';
}


#include <stdio.h>
#include <string.h>

void squeeze(char s[], int c);

main(){

	char t[30];
	int a, i;

	printf("Podaj literke: ");
	scanf("%c", &a);
	printf("Podaj slowo: ");
	scanf("%s", t);
	squeeze(t, a);
	for(i=0; i<strlen(t); i++)
		printf("%c", t[i]);

	return 0;
}

// squeeze: usuń wszystkie znaki c z s

void squeeze(char s[], int c){

	int i, j = 0;

	for (i =  0; s[i] != '\0'; i++)
		if (s[i] != c)
			s[j++] = s[i];

	s[j] = '\0';
}
2

Żaden sposób nie jest prawidłowy. Powinno być:

char a;
...
void squeeze(char s[], char c)

Z rzeczy niezwiązanych z pytaniem:

  1. int main()
  2. printf("%s", t) zamiast pętli
2

Jak dla mnie oba działają poprawnie.
http://melpon.org/wandbox/permlink/Q2s2Fpo0lzHAkzhL
http://melpon.org/wandbox/permlink/CIrmoW0bivUA0MRK

Tak jak napisał @twonek możesz pomyśleć o przyjmowaniu znaku jako char w funkcji squeeze, ale nie jest to aż tak istotne. Natomiast:

wtf? funkcja musi zwracać typ, najlepiej int, o ile nie masz pod nosem dokumentacji swojej.

main(){

a jest typu int, powinno być typu char

scanf("%c", &a);

nie łatwiej printf("%s\n", t)?

    for(i=0; i<strlen(t); i++)
        printf("%c", t[i]);

PS: wszystko to by Ci kompilator powiedział, wystarczy włączyć warningi na przyzwowitym poziomie (-Wall -WExtra -pedantic dla gcc/icc/clanga, /W3 lub /W4 dla msvc)

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