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

problemy z pętlą do while oraz losowaniem.

Ostatnio zmodyfikowano 2017-09-07 21:23
Autor Wiadomość
pekfos
» 2017-09-07 20:11:49
To, co się zapisze do inta po wpisaniu samych błędnych danych zależy od wersji standardu, której trzyma się twój kompilator. Może twoja linia powinna wyglądać tak:
C/C++
czydobre = cin >> liczba2;
//lub
czydobre = cin >> liczba2 && liczba2;
W zależności czy wpisana liczba 0 jest poprawna, czy nie.
P-164690
karambaHZP
» 2017-09-07 20:14:37
std::cin.sync()
 też może nie działać tak jak tego oczekujesz.
Może trzeba zamienić to na
std::cin.ignore()
.
P-164691
mateczek
» 2017-09-07 20:14:52
C/C++
#include <iostream>
#include<limits>
using namespace std;
int main() {
    int liczba2;
    while( !( cin >> liczba2 ) ) //powtarzaj póki nie uda się wczytać liczby
    {
        cin.clear();
        //cin.sync(); //tylko windows
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        cout << "to co wpisałeś to nie liczba!!! powtorz" << endl;
    };
}
P-164692
Corvette653
Temat założony przez niniejszego użytkownika
karambaHZP
» 2017-09-07 20:16:59
Która linijka?
dobra od nowa
tworze dwie zmienne int liczba2 i bool czydobre
wczytuje liczba2
przypisuje do boola liczba2-jeśli naprawdę jest to liczba bool = 1 jeśli nie bool = 0
wypisuje wartość boola aby wiedzieć czy pętla ma się powtórzyć
i czyscze aplikacje od flag błędów itd...

TO NIE DZIAŁA
while ( !czydobre ) znaczy że kod ma się powtórzyć gdy bool czydobre = 0
TO NIE DZIAŁA
ponieważ pętla nigdy się nie powtarza ( nawet jeśli aplikacja wypisze 0 jako wartość boola )
mateczek wielkie dzięki twój kod poprawnie działa :) jednak używam windows 10 i mówię że w innych apk to działa
P-164693
mateczek
» 2017-09-07 20:22:50
może niedziałać bo kod jest bez sensu!!! Sprawdzasz liczbę, której nie udało się wczytać
C/C++
cin >> liczba //gdy liczbę wczytasz to jest liczba a gdy wczytanie się nie uda to nie ma nic. 
if( liczba ) {
    // co jest w zmiennej liczba skoro wczytanie się nie powiodło ?? 0 ?? czy może (-1) bo ja nie mam pojęcia.
}
zrób tak jak napisał Pekfos na górze strony lub skompiluj przykład, który wstawiłem ja dwa posty wyżej. 
P-164694
karambaHZP
» 2017-09-07 20:23:55
ponieważ pętla nigdy się nie powtarza ( nawet jeśli aplikacja wypisze 0 jako wartość boola )
To jest niemożliwe. Czy uruchamiasz właściwy plik? Może nie przebudowany jest po jakiejś zmianie w kodzie.
P-164695
Corvette653
Temat założony przez niniejszego użytkownika
jeden temat zamknięty teraz temat 2
» 2017-09-07 20:49:17
jak wczytanie się nie powiedzie??
jeśli wpiszesz a zamiast cyfry to zapisze się np.: 1341 a w linii:
czydobre = liczba2 mój bool czyli czydobre dostanie wartość 0 koniec.
a pętla się naprwde nie wykona ponownie ( w takim przypadku jak powyżej powinna się powtórzyć jednak tego nie robi mówie że mój nauczyciel tego nie ogarnął naprawdę nie wiem. Na szczęście kod który podaliście powyżej działa nie rozumiem go do końca ale grunt że jest dobrze i koniec ). Natomiast pozostaje sprawa tej linijki:
liczba = liczba1 || liczba2 || liczba3; chodzi o to że mam 3 zmienne liczba1,liczba2 i liczba3 Chce wylosować jedną z nich. nie mogę napisać liczba = liczba2 ponieważ to nie jest losowanie ja chce aby komputer !!losowo!! wybierał jedną z tych 3 zmiennych i przypisywał jej wartość do zmiennej liczba.
P-164697
karambaHZP
» 2017-09-07 20:59:30
jeśli wpiszesz a zamiast cyfry
To zależy od kompilatora. UB jeśli później operujesz na zmiennej do której wczytujesz dane.
Próba wczytania znaku do zmiennej liczbowej powoduje zablokowanie strumienia wejściowego.
Zmienna nie zostanie nadpisana wprowadzanymi danymi i program operuje na śmieciach.
P-164698
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona