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

rozdział/lekcja 16, zadanie domowe

Ostatnio zmodyfikowano 2022-04-05 19:34
Autor Wiadomość
jebackoze
Temat założony przez niniejszego użytkownika
rozdział/lekcja 16, zadanie domowe
» 2022-04-05 12:23:59
hej,
ponizej wklejam kod, ktory nie chce prawidlowo dzialac, tj. po uruchomieniu nie wyswietla "drugiego" tekstu (15 wiersz), tj.

Podaj liczbe z zakresu 1-1000:
dopiero sie wyswietla powyzszy tekst po wprowadzeniu liczby.
gdzie lezy blad?

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <limits>
using namespace std;

int main()
{
   
srand( time( NULL ) );
   
int liczba, licznik = 0, ukryta =(( std::rand() % 1000 ) + 1 );
   
cout << "test: " << ukryta << endl; //na potrzeby testu
   
   
cin.clear();
   
cin.ignore( numeric_limits < std::streamsize >::max(), '\n' );
   
cout << "Podaj liczbe z zakresu 1-1000: " << endl;
   
cin >> liczba;
   
licznik++;
   
if( cin.good() && liczba >= 1 & liczba <= 1000 )
   
{
       
do {
           
licznik++;
           
if( liczba < ukryta )
           
{
               
cout << "to nie ta liczba, jest za mala, sprobuj ponownie: " << endl;
               
cin.clear();
               
cin.ignore( numeric_limits < std::streamsize >::max(), '\n' );
               
cin >> liczba;
           
}
           
if( liczba > ukryta )
           
{
               
cout << "to nie ta liczba, jest za duza, sprobuj ponownie: " << endl;
               
cin.clear();
               
cin.ignore( numeric_limits < std::streamsize >::max(), '\n' );
               
cin >> liczba;
           
}
        }
while( liczba != ukryta ); /*koniec, gdy 1 rozne od 1, gdyz to false*/
       
       
licznik++;
       
cout << "brawo, odgadles ukryta: " << ukryta << "\n wykonales prob: " << licznik << endl;
   
}
   
else
       
 cout << "zle dane, mialy byc liczby" << endl;
   
   
return 0;
}

ponizej to, co pokazuje sie w konsoli:

test: 695
1
Podaj liczbe z zakresu 1-1000:

2
to nie ta liczba, jest za mala, sprobuj ponownie:
695
brawo, odgadles ukryta: 695
 wykonales prob: 3

Process returned 0 (0x0)   execution time : 3.220 s
Press any key to continue.
P-179363
nanoant20
» 2022-04-05 13:48:08
zakomentuj cin.clear(); and cin.ignore tak jak poniżej
C/C++
cout << "test: " << ukryta << endl; //na potrzeby testu
//cin.clear();
//cin.ignore( numeric_limits < std::streamsize >::max(), '\n' );
cout << "Podaj liczbe z zakresu 1-1000: " << endl;
P-179365
jebackoze
Temat założony przez niniejszego użytkownika
» 2022-04-05 13:54:57
probowalem tez tego, ale wowczas gdy np. wprowadze litere albo liczbe poza zakresem to nie przerywa mi programu
i jako ciekawostke, liczy mi o 1 probe wiecej w takiej sytuacji


test: 944
Podaj liczbe z zakresu 1-1000:
1
to nie ta liczba, jest za mala, sprobuj ponownie:
a
to nie ta liczba, jest za mala, sprobuj ponownie:
3
to nie ta liczba, jest za mala, sprobuj ponownie:
aaaaaaa
to nie ta liczba, jest za mala, sprobuj ponownie:
944
brawo, odgadles ukryta: 944
 wykonales prob: 6

Process returned 0 (0x0)   execution time : 8.998 s
Press any key to continue.
P-179366
nanoant20
» 2022-04-05 15:14:00
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <limits>

using namespace std;

int main()
{
   
srand( time( NULL ) );
   
int liczba, licznik = 0, ukryta =(( std::rand() % 1000 ) + 1 );
   
cout << "test: " << ukryta << endl; //na potrzeby testu
   
   
do
   
{
       
cout << "Podaj liczbe z zakresu 1-1000: ";
       
cin >> liczba;
       
       
if( cin.good() && liczba >= 0 & liczba <= 1000 )
       
{
           
++licznik;
           
if( liczba < ukryta )
           
{
               
cout << "liczba, jest za mala, sprobuj ponownie: " << endl;
               
cin.clear();
               
cin.ignore( numeric_limits < std::streamsize >::max(), '\n' );
               
           
}
           
if( liczba > ukryta )
           
{
               
cout << "liczba, jest za duza, sprobuj ponownie: " << endl;
               
cin.clear();
               
cin.ignore( numeric_limits < std::streamsize >::max(), '\n' );
           
}
        }
       
else
       
{
           
cout << "zle dane, mialy byc liczby" << endl;
           
cin.clear();
           
cin.ignore( numeric_limits < std::streamsize >::max(), '\n' );
       
}
       
    }
   
while( liczba != ukryta ); /*koniec, gdy 1 rozne od 1, gdyz to false*/
   
   
   
cout << "brawo, odgadles ukryta: " << ukryta << "\n wykonales prob: " << licznik << endl;
   
   
return 0;
}
P-179367
jebackoze
Temat założony przez niniejszego użytkownika
» 2022-04-05 19:34:19
no i elegancko, chyba cale to zamieszanie mi wychodzilo przez to, ze funkcje do umiescilem pod if, a nie odwrotnie i przez to tez else bylo poza petla
P-179371
« 1 »
  Strona 1 z 1