Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

(C++) if else

Ostatnio zmodyfikowano 2017-09-20 21:33
Autor Wiadomość
Antyflash
Temat założony przez niniejszego użytkownika
(C++) if else
» 2017-09-19 21:34:58
Czemu program po wpisaniu liczby mniejszej od stu pokazuje ją a nie przekierowuje do else?




string x;
int main()

{
   
    cout << "liczba "  ;
    cin  >> x;
        if(x>="100")
 {
        cout<<x;
 }
        else
 {
     cout<<"zle";
P-165007
Kinexity
» 2017-09-19 21:48:58
Bo porównujesz liczbę do ciągu znaków...
P-165008
maly7
» 2017-09-20 13:01:38
Nie do końca porównuje liczbę do ciągu znaków, x również jest stringiem.

Antyflash, co według ciebie będzie robiło takie porównanie stringów?
Raczej nie chcesz porównywać ze sobą stringów tylko liczby.

Porównywanie stringów działą tak:
"32" > "102" - true
"19999" > "2" - false
P-165017
Kinexity
» 2017-09-20 15:09:19
Nie zauważyłem, że x to string. Tak, czy inaczej - porównywana jest długość stringów, a nie liczby.
P-165019
carlosmay
» 2017-09-20 15:22:55
http://en.cppreference.com/w​/cpp/string/basic_string
Stringi porównywane są leksykograficznie.
C/C++
#include <iostream>
#include <string>
using namespace std;

int main()
{
    cout << boolalpha <<( "100" > "10" ) << endl;
}


Użyj std::stoi() lub zrezygnuj z std::string.
P-165020
Monika90
» 2017-09-20 16:02:36
Carlosmay, tak, std::stringi są porównywane leksykograficznie, ale ty porównujesz adresy tablic.
P-165021
carlosmay
» 2017-09-20 21:33:50
Dzięki @Monika za uwagę: (chwilowa niepamięć)
Tak, czy inaczej - porównywana jest długość stringów, a nie liczby.
C/C++
#include <iostream>
#include <string>

int main()
{
    std::string s1 { "100" }, s2 { "000010" };
    std::cout << std::boolalpha <<( s1 > s2 ) << std::endl; // s1 > s2, a s2 jest dłuższy od s1
}
P-165047
« 1 »
  Strona 1 z 1