Kezdőoldal » Számítástechnika » Programozás » C-ben hogyan lehet egy olyan...

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?

Figyelt kérdés

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.



2017. jan. 20. 23:05
 1/4 A kérdező kommentje:
Mert most a probléma az,hogy mindig helytelennek veszi a beírt nemet:D
2017. jan. 20. 23:05
 2/4 anonim ***** válasza:

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.

2017. jan. 20. 23:16
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
100%

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.

2017. jan. 20. 23:18
Hasznos számodra ez a válasz?
 4/4 uno20001 ***** válasza:

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]

2017. jan. 21. 12:17
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!