Blok if nie sprawdza wyniku postaci strumienia znaków literalnych

W tym miejscu zadajemy pytania na temat języka C++, dzielimy się swoją wiedzą, udzielamy wsparcia, rozwiązujemy problemy programistyczne.
Awatar użytkownika
foreste
User
User
Posty: 113
Rejestracja: niedziela 06 wrz 2015, 19:53
Kontaktowanie:

Blok if nie sprawdza wyniku postaci strumienia znaków literalnych

Postautor: foreste » środa 26 lip 2017, 09:31

Witam mam nie typowy problem wykonaniem kodu bloku if reagujący na dane typu strumieniowego z scanf np

Kod: Zaznacz cały

int main()
{
while(1)
{
char dane[10];
scanf("%9s", &dane);

if(dane == "test")
}
opcja 1
}else if(dane == "test2")
{
opcja 2
}else if(dane == "test3")
{
opcja 3
}
}

bloki if nie reagują , możliwe ze o czymś zapomniałem lub nie wiem. w printf zmienna dane wyświetla wprowadzone dane do czyszczenia bufora bedę używał fflush(stdim).
♫,♫.¨♫

StaryAnoda

Re: Blok if nie sprawdza wyniku postaci strumienia znaków literalnych

Postautor: StaryAnoda » środa 26 lip 2017, 09:50

Stringi porównuję się inaczej zobacz funkcję w biliotece string.h

Awatar użytkownika
xor
User
User
Posty: 169
Rejestracja: poniedziałek 05 wrz 2016, 21:44

Re: Blok if nie sprawdza wyniku postaci strumienia znaków literalnych

Postautor: xor » środa 26 lip 2017, 10:01

Po pierwsze nawiasy klamrowe masz "na abarot".

Po drugie w scanf ampersand jest niepotrzebny albowiem tablica już jest wskaźnikiem, a więc powinno być:

Kod: Zaznacz cały

scanf("%9s", dane);

Po trzecie, w języku C łańcuchów znakowych się nie porównuje się w ten sposób. Jest do tego odpowiednia funkcja w bibliotece stadardowej, w string.h:

Kod: Zaznacz cały

strcmp(dane,"test");

lub

Kod: Zaznacz cały

strncmp(dane,"test",il_znakow_do_porownania);

SuperGość
Uber Geek
Uber Geek
Posty: 2346
Rejestracja: piątek 04 wrz 2015, 09:03

Re: Blok if nie sprawdza wyniku postaci strumienia znaków literalnych

Postautor: SuperGość » środa 26 lip 2017, 10:03

ja tylko klocki składam ale wiem, że jest taka funkcja "strcmp()" z biblioteki którą wyżej kolega podał, a tu masz przykład https://www.tutorialspoint.com/c_standa ... strcmp.htm

--------------------edit-----------------------
kolega xor juz to napisał, w sumie mozna usunąć ten post

Awatar użytkownika
PROTON
Expert
Expert
Posty: 527
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

Re: Blok if nie sprawdza wyniku postaci strumienia znaków literalnych

Postautor: PROTON » środa 26 lip 2017, 10:19

Jak to ma być C++ to poniższe rozwiązanie polecam.

Kod: Zaznacz cały

#include <iostream>
#include <string>

int main(){

    while(1){

        std::string dane;
        std::cin >> dane;

        if(dane == "test"){
           std::cout<<"TEST OK"<<std::endl;
        }
    }
    return 0;

}

Gott weiß ich will kein Engel sein.

Awatar użytkownika
foreste
User
User
Posty: 113
Rejestracja: niedziela 06 wrz 2015, 19:53
Kontaktowanie:

Re: Blok if nie sprawdza wyniku postaci strumienia znaków literalnych

Postautor: foreste » środa 26 lip 2017, 19:24

wojtek pisze:ja tylko klocki składam ale wiem, że jest taka funkcja "strcmp()" z biblioteki którą wyżej kolega podał, a tu masz przykład https://www.tutorialspoint.com/c_standa ... strcmp.htm

--------------------edit-----------------------
kolega xor juz to napisał, w sumie mozna usunąć ten post
xor pisze:Po pierwsze nawiasy klamrowe masz "na abarot".

Po drugie w scanf ampersand jest niepotrzebny albowiem tablica już jest wskaźnikiem, a więc powinno być:

Kod: Zaznacz cały

scanf("%9s", dane);

Po trzecie, w języku C łańcuchów znakowych się nie porównuje się w ten sposób. Jest do tego odpowiednia funkcja w bibliotece stadardowej, w string.h:

Kod: Zaznacz cały

strcmp(dane,"test");

lub

Kod: Zaznacz cały

strncmp(dane,"test",il_znakow_do_porownania);

Oto mi chodziło, po testowaniu przykładowym kodzie mam rezultat oczekiwany przez mnie dziękuje za nakierowanie mnie na to :).
♫,♫.¨♫


Wróć do „Pisanie programów w C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości