Strona 1 z 1

Blok if nie sprawdza wyniku postaci strumienia znaków literalnych

: środa 26 lip 2017, 09:31
autor: foreste
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).

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

: środa 26 lip 2017, 09:50
autor: StaryAnoda
Stringi porównuję się inaczej zobacz funkcję w biliotece string.h

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

: środa 26 lip 2017, 10:01
autor: xor
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);

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

: środa 26 lip 2017, 10:03
autor: SuperGość
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

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

: środa 26 lip 2017, 10:19
autor: PROTON
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;

}


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

: środa 26 lip 2017, 19:24
autor: foreste
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 :).