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

[Qt]QString zwraca niepoprawne wartości?

Ostatnio zmodyfikowano 2014-11-17 19:15
Autor Wiadomość
bingo009
Temat założony przez niniejszego użytkownika
[Qt]QString zwraca niepoprawne wartości?
» 2014-11-17 19:04:13
Witam was serdecznie, w nazwie tematu jest znak zapytania, bo sam nie mam pojęcia co może być na rzeczy. Otóż piszę sobie konwerter, pozwalający konwertować liczby pomiędzy czterema systemami(BIN, OCT, DEC, HEX). Zająłem się funkcją konwersji liczby z systemu dwójkowego na dziesiętny i mam problem. Do wprowadzania danych i wyprowadzania mam dwie kontrolki typu LineEdit. System źródłowy i docelowy wybiera się za pomocą rozwijanej listy. Po wciśnięciu przycisku program sprawdza z jakiego systemu ma zostać przeprowadzona konwersja na jaki i wywołuje odpowiednią funkcję. Jako pierwszy piszę algorytm konwersji binarnej na dziesiętny. Po wywołaniu funkcja pobiera wejście z pierwszego LineEdit(który służy do wprowadzania danych) i zapisuje je w zmiennej typu QString. Potem sprawdza, czy w wejściu nie występują inne znaki poza 0 i 1 i tu jest właśnie problem. Wrzucam funkcję w aktualnym stanie:
C/C++
void MainWindow::bin_dec()
{
    bool valid_input = true;
    input = ui->linedt_input->text();
   
    for( int i = 0; i < input.size(); i++ )
    if( input[ i ] != '0' || input[ i ] != '1' )
         valid_input = false;
   
    if( !valid_input ) {
        output = "You can only write 0 and 1!";
        return;
    }
   
    output = input;
}

Jak widać jest pętla for, która ustawia zmienną typu boolean na false, jeżeli znajdzie inny znak niż 0 i 1. Później jest if, który zapisuje w zmiennej output(również jest typu QString) odpowiednią informację i wychodzi z funkcji, jeżeli zmienna bool jest ustawiona na false. Wyświetlanie tego co jest w zmiennej output jest nieistotne i jest w innej części programu. Problem polega na tym, że funkcja niezależnie od tego, czy wejście jest poprawne czy nie, zwraca ciągle mi błąd. Nie wiedzieć czemu, flaga jest ustawiona na false, nawet jeżeli wejście jest poprawne. Ktoś ma jakiś pomysł czemu tak jest?
P-120889
NopeDotAvi
» 2014-11-17 19:08:30
if( input[ i ] != '0' || input[ i ] != '1' )

zawsze będzie spełnione bo jak masz np. taką liczbę: 1001
to pierwsze nie jest 0 tylko 1 więc już jest warunek spełniony.

Zamiast
||
 daj
&&
P-120892
bingo009
Temat założony przez niniejszego użytkownika
» 2014-11-17 19:15:28
Ech, wiedziałem, że nie powinienem programować, jak jestem zmęczony dniem. Dziękuje ci bardzo, za rozwiązanie takiej prostej zagadki(a jednak nie wpadłem na nią). Nie wiem co mnie podkusiło upierać się na || zamiast na &&.
P-120898
« 1 »
  Strona 1 z 1