[C]Program do sprawdzenia

Awatar użytkownika
Damian09
Użytkownik
Użytkownik
Posty: 42
Rejestracja: 29 lip 2009, o 19:49
Płeć: Mężczyzna
Pomógł: 1 raz

[C]Program do sprawdzenia

Post autor: Damian09 »

Program ma wpisywać do kolejnych komórek tablicy jednowymiarowej znaki aż do napotkania znaku #.
Kiedy ma wyswietlić zawartość tablicy wyświetla mi jakieś buźki. Co jest nie tak?

Kod: Zaznacz cały

#define MAX 50
main(){
	char tab[MAX];
int i,j;
i=0;
j=0;
while(tab[i]=getchar()!='#'){
i++;
j++;
}
for(i=0;i<j;i++){
printf("%c", tab[i]);
}


getch();
}
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

[C]Program do sprawdzenia

Post autor: Sokół »

Nie masz dyrektywy include, musisz załączyć bibliotekę stdio.h

W:

Kod: Zaznacz cały

while(tab[i]=getchar()!='#'){ 
Ta składnia jest równoważna:

Kod: Zaznacz cały

while(tab[i]=( getchar()!='#') ){ 
Do tab[] będą pobierane wartości logiczne porównania, a nie znaki.
Awatar użytkownika
Damian09
Użytkownik
Użytkownik
Posty: 42
Rejestracja: 29 lip 2009, o 19:49
Płeć: Mężczyzna
Pomógł: 1 raz

[C]Program do sprawdzenia

Post autor: Damian09 »

Poprawiłem program. Może się komuś przyda. Biblioteka stdio jest niepotrzebna.

Kod: Zaznacz cały

#define MAX 50

main(){
	char tab[MAX],c;
	
int i,j;

i=0;
j=0;
while((tab[i]=(c=getchar()))!='#'){
i++;
j++;
}
for(i=0;i<=j;i++){
printf("%c", tab[i]);
}


getch();
}
Awatar użytkownika
Sokół
Użytkownik
Użytkownik
Posty: 451
Rejestracja: 17 wrz 2006, o 19:22
Płeć: Mężczyzna
Lokalizacja: Zielona Góra
Podziękował: 15 razy
Pomógł: 55 razy

[C]Program do sprawdzenia

Post autor: Sokół »

funkcja getchar() i printf(); jest zawarta w bibliotece stdio. Jeśli Ci się kompiluje, to być może kompilator sam niejawnie dodaje tą bibliotekę. U mnie (code::blocks, gcc z mingw) bez dyrektywy nie przechodzi.
movax1
Użytkownik
Użytkownik
Posty: 64
Rejestracja: 3 paź 2009, o 12:15
Płeć: Mężczyzna
Podziękował: 16 razy
Pomógł: 2 razy

[C]Program do sprawdzenia

Post autor: movax1 »

Jakiego używasz kompilatora? Bo to dość dziwne, żeby kompilator sam z siebie niejawnie dodawał bibliotekę, nie wyświetlając nawet żadnego ostrzeżenia Generalnie bez dołączenia stdio/cstdio ten program nie ma prawa działać
Awatar użytkownika
Damian09
Użytkownik
Użytkownik
Posty: 42
Rejestracja: 29 lip 2009, o 19:49
Płeć: Mężczyzna
Pomógł: 1 raz

[C]Program do sprawdzenia

Post autor: Damian09 »

Używam visual 2008 express ale sprawdziłem i w devie też mi kompiluje.
movax1
Użytkownik
Użytkownik
Posty: 64
Rejestracja: 3 paź 2009, o 12:15
Płeć: Mężczyzna
Podziękował: 16 razy
Pomógł: 2 razy

[C]Program do sprawdzenia

Post autor: movax1 »

Eee... co najmniej dziwne. Mi pod Visual Studio, dev-cpp, code::blocks - nie działa. I ten kod nie może działać, przecież obecnie funkcje printf() i getchar() są niezdefiniowane. Tak czy inaczej, jeśli ten kod masz gdzieś oddać (nie wiem w jakim celu był on pisany), to dyrektywę tę dodaj, bo u kogoś na pewno nie będzie działało

Pozdrawiam.
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

[C]Program do sprawdzenia

Post autor: kadiii »

Większość ide programistycznych dodaje pakiet libc (oczywiście przy kompilacji kompilatorem jezyka C nie C++), który zawiera podstawowe funkcje biblioteczne w tym funkcje printf czy getchar. Jest to na pewno jeden z prostszych trików używanych w konkursach na minikody - jeśli chodzi o naukę to chyba jednak warto na początku dołączać biblioteki ręcznie(choć tak naprawdę sporo środowisk potrafi naprawiać takie niedociągnięcia automatycznie(/półautomatycznie) więc nie jest to jakaś kluczowa sprawa).
ODPOWIEDZ