Nie mogę porównać zmiennej napisowej.

2016-12-12 14:08

Rejestracja: 3 lata temu

Ostatnio: 2 miesiące temu

0

Dzień dobry, mam taki kod:

char plec[50];
printf("Podaj plec(kobieta, mezczyzna): \n");
scanf("%s", plec);
if (plec == "kobieta")
{
    printf("Dobrym prezentem bedzie lalka.");
}

Program się odpala, wpisuję tą płeć, ale nie wchodzi do tej instrukcji warunkowej. Proszę o podpowiedź co robię źle.

edytowany 1x, ostatnio: kq, 2016-12-12 14:08

Pozostało 580 znaków

kq
2016-12-12 14:09
kq
Moderator C/C++

Rejestracja: 6 lat temu

Ostatnio: 3 minuty temu

Lokalizacja: Szczecin

3

W C do porównwania stringów służy strcmp/strncmp


edytowany 4x, ostatnio: kq, 2016-12-12 14:11

Pozostało 580 znaków

2016-12-12 14:51

Rejestracja: 4 lata temu

Ostatnio: 2 godziny temu

0

W C, stringi to tablice znakowe, a tablice to (z grubsza) wskaźniki na pierwszy element. Tak więc porównując CStringi przez ==, porównujesz to, czy zaczynają się w tym samym miejscu w pamięci, a to nie jest tożsame z przechowywaniem tego samego napisu.

Pozostało 580 znaków

2016-12-12 14:58

Rejestracja: 3 lata temu

Ostatnio: 2 miesiące temu

0
Althorion napisał(a):

W C, stringi to tablice znakowe, a tablice to (z grubsza) wskaźniki na pierwszy element. Tak więc porównując CStringi przez ==, porównujesz to, czy zaczynają się w tym samym miejscu w pamięci, a to nie jest tożsame z przechowywaniem tego samego napisu.

Czyli jakiego operatora muszę użyć zamiast '=='?

Żadnego. C nie ma operatorów porównujących zawartość stringa. Istnieją natomiast funkcje w bibliotece standardowej, które takiego porównania dokonują (opisane wyżej), jak się uprzesz, to możesz też napisać swoją własną. - Althorion 2016-12-12 15:07

Pozostało 580 znaków

2016-12-12 15:05

Rejestracja: 16 lat temu

Ostatnio: 1 godzina temu

1

KQ, już Ci odpowiedział:

    int rc = strcmp(lhs, rhs);
    if(rc == 0)
        printf("[%s] equals [%s]\n", lhs, rhs);
    else if(rc < 0)
        printf("[%s] precedes [%s]\n", lhs, rhs);
    else if(rc > 0)
        printf("[%s] follows [%s]\n", lhs, rhs);
int rc = strcmp(lhs, rhs);

lhs - pierwszy tekst,
rhs - drugi tekst

strcmp(lhs, rhs); porownujesz i w zmiennej rc masz wynik:
jezeli rc ==0 wtedy znaczy ze sa rowne.


Kto nigdy nie zrobił var dupa niech pierwszy rzuci kamień.
edytowany 2x, ostatnio: karpov, 2016-12-12 15:08

Pozostało 580 znaków

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