C-ben hogyan lehet egy olyan kritériumot adni, hogy a bekért szöveg, csak az lehet amit én adtam meg, csak akkor lép tovább?
Itt a program:
#include <stdio.h>
#include <string.h>
typedef struct adat{
char nem[6];
char nev[51];
}adat;
main()
{
adat adatok[2];
int i;
for(i=0;i<2;i++){
back:
puts("Adja meg a nemet (ferfi/no)");
gets(adatok[i].nem);
if(adatok[i].nem!="ferfi" || adatok[i].nem!="no"){
printf("Rosszul irta be a nemet\n");
goto back;
puts("ADja meg a keresztnevet");
gets(adatok[i].nev);
}
for(i=0;i<2;i++){
printf("\n");
printf("A neme:%s",adatok[i].nem);
}
}
}
Nem-nél van az a kritérium,hogy csak férfi illetve nő lehet.
if(adatok[i].nem!="ferfi" || adatok[i].nem!="no"){
Ezzel ezt írtad le. Az adatok[i].nem-re mutató pointer nem egyenlő a "ferfi" karaktertömbre mutató pointerrel. Ez jelen esetben tényleg igaz. Próbáld ki az strncmp-t.
Rossz a logika, egyszerre felteszem nem lehet mindkét nemű, a feltételvizsgálatod meg csak akkor adna vissza false t, úgyhogy mindenképp a goto back; re vezet (megjegyzem a goto t nem erőltetném ezen a szinten(de később sem ha nem muszáj), rémálom lesz debugolni).
if(nem != ferfi && nem != no)
Legalábbis gondolom, c++ ban kb 10 éve programoztam utoljára egy hello world erejéig, de gyanítom az && operátor ott is ÉS-t jelent.
Az előző válaszolók remekül leírták mi a hiba:
- pointereket hasonlítasz és nem a karaktereket
- a feltétel logikája rossz
Azt még hozzátenném, hogy nem használj gets()-t, mert könnyen buffer overflow-ba futhatsz (mi van azt írom be, hogy "hatezbizonyhosszabbmint5karakter"?).
Használj helyette scanf()-t[1] (a format stringben határozd meg a max. hosszt) vagy fgets()-t[2].
char nem[6];
scanf("%5s", nem);
//vagy
fgets(nem, 6, stdin);
[1]: [link]
[2]: [link]
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!