NETWARS - CZĘSTO ZADAWANE PYTANIA

Zjedź na dół

2012-11-20 17:13:40
[#1] ehem
Sprawa wygląda tak. Muszę wczytać sobie z klawiatury tablicę struktur. Mam prostą strukturkę:
struct T_samochod
{
char nazwa[15];
int przebieg;
char dzial[15];
char numer[5];
}tablica[N];

I funkcję do wczytywania:

int wypelnij_tablice(struct T_samochod tab[], int rozmiar)
{
printf("nWCZYTYWANIE LISTY SAMOCHODOW.n");
int licznik=0;
while(licznik<rozmiar)
{
printf("npodaj nazwe samochodu o indeksie %dn", licznik);
scanf("%s", tab[licznik].nazwa);
if(EHEM) return licznik;
else
{
printf("npodaj przebieg silnika samochodu o indeksie %dn", licznik);
scanf("%d", &tab[licznik].przebieg);
printf("npodaj kraj produkcji samochodu o indeksie %dn", licznik);
scanf("%s", tab[licznik].dzial);
printf("npodaj 5-cyfrowy numer seryjny samochodu o indeksie %dn", licznik);
scanf("%s", tab[licznik].numer);
}
licznik++;
}
}

Chodzi o to, by program przestał wczytywać kolejne dane, gdy użytkownik poda jako nazwę samochodu. nazwę pustą - samą spacje. Jak napisać warunek EHEM, by to zrobić? Próbowałem if(tab[licznik].nazwa==' '), ale nie działa. Co robię źle?
2012-11-20 17:23:20
Może użyj strcmp.
2012-11-20 17:25:25
albo nie

Zmieniony 2012-11-20 17:25:41 przez SuperKajtek

2012-11-20 17:51:56
[#4] Lupus
tab[licznik].nazwa jest typu char*

Możesz zrobić:
if(tab[licznik].nazwa[0]==' ' && tab[licznik].nazwa[1]=='')
2012-11-20 18:12:38
[#5] ehem
Lupus, twój sposób nie działa. Komunikat o błędzie error: empty character constant.

Rozumiem chyba o co ci chodzi. Znaczy potrafię zrobić, by przerywał mi wczytywanie dowolny inny znak niż spacja. Ale właśnie spacji nie potrafię. Próbowałem też użyć funkcji strcmp, ale też pętla dalej sobie biegnie jak gdyby nigdy nic.

Zmieniony 2012-11-20 18:13:05 przez ehem

2012-11-20 18:18:58
[#6] Arcanos
http://forum.4programmers.net/Spolecznosc/Perelki/172813-jak...
2012-11-20 18:21:54
[#7] fex
sprobuj if ( tab[licznik].nazwa[0] == (char)32 ) return -1;

Zmieniony 2012-11-20 18:23:41 przez fex

2012-11-20 18:22:45
W C wzięcie czegoś w apostrofy oznacza typ char. Natomiast w cudzysłowie char*. jezeli chcesz porównywać typ char* (czyli tab[licznik].nazwa), to na pewno nie zadziała porównanie go z charem (czyli ' '). IMO (nie chce mi się sprawdzac) powinno zadziałac cos w stylu:
if (!strcmp(tab[licznik].nazwa," ");

Porównanie if (tab[licznik].nazwa==" ") nic nie da bo C porówna wskaźniki i nic z tego nie będziesz miał. W c++ gdzie masz typ string to takie rzeczy sa możliwe dzieki przeładowaniu operatora.
2012-11-20 18:29:27
Bylem tu.
2012-11-20 18:40:35
[#10] Lupus
W 4 Lupus napisał: [Pokaż]

W 5 ehem napisał: [Pokaż]

forum przeparsowało i wycięło znak 0 z tego kodu.

Ma być:
if(tab[licznik].nazwa[0]==' ' && tab[licznik].nazwa[1]==0)


Na pewno zadziała.
''
2012-11-20 19:55:42
[#11] Sergiej
chodzi o spację czy dowolny pusty znak? (whitespace)
generalnie użyj czegoś stąd http://www.cplusplus.com/reference/clibrary/cstring/
TEMAT ZAMKNIĘTY po 2 tygodniach automatycznie.