Balto11181 Temat założony przez niniejszego użytkownika |
Funckje zadanie domowe (modyfikacja) » 2016-10-05 15:18:12 Witajcie, otóż zrobiłem zadanie domowe z funkcji i chciałem je troszkę zmodyfikować by zabezpieczyć program. Otóż, trochę mi się pomieszało i sam nie wiem na czym zrobiłem błąd. Otóż kod jest w trakcie budowania, ale już teraz wiem, że coś mi nie pasuje, zapewne zrobiłem jakiś mega błąd :/, ale tak mnie natura stworzyła, żebym kombinował i chyba w ten sposób szybciej do tego dojdę, także dziękuje za pomoc:) udostepniam kod: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int wylosuj( int start, int stop ) { bool wczytano; int losowanie; losowanie =( rand() %( stop + 1 - start ) + start ); return losowanie; do { cout << "Podaj przedzial od: " << endl; cin >> start; int stop; cout << "Do: " << endl; wczytano = cin.fail(); cin.clear(); cin.sync(); if( wczytano ) cout << "Uzywaj tylko liczb" << endl; } while( wczytano ); return losowanie; }
int main() { srand( time( NULL ) ); int start; cout << "Podaj przedzial od: " << endl; cin >> start; int stop; cout << "Do: " << endl; cin >> stop; int ile = 20; do { cout << wylosuj( start, stop ) << endl; ile--; } while( ile > 0 ); return 0; }
|
|
mateczek |
» 2016-10-05 17:48:08 Trochę pokasowałem to co było z grubsza bez sensu #include <iostream> #include <ctime> using namespace std; int wylosuj( int start, int stop ) { int losowanie =( rand() %( stop + 1 - start ) + start ); return losowanie; }
int main() { srand( time( NULL ) ); int start; cout << "Podaj przedzial od: " << endl; cin >> start; int stop; cout << "Do: " << endl; cin >> stop; int ile = 20; while( ile-- ) cout << wylosuj( start, stop ) << endl; return 0; } |
|
Balto11181 Temat założony przez niniejszego użytkownika |
» 2016-10-05 20:17:14 Hmm, po pierwsze chciałem dołożyć do tego tak jak napisałem zabezpieczenie przed wpisaniem litery a nie cyfry, to mi skasowałeś. Po drugie twój program nie odpala, bo są błędy przy int losowanie. |
|
mateczek |
» 2016-10-05 21:00:05 moja wina nie doczytałem że chodzi o zabezpieczenie. W twoim wypadku nie można zabezpieczań zrobić w funkcji wylosuj. Gdyż funkcja ta przedziały przyjmuje w parametrze, a nie pobiera sama!!! Dlatego kod w tej funkcji był po prostu pozbawiony znaczenia. W stylu wywalił niepotrzebne linijki i zadowolony z siebie że poprawił :P. #include <iostream> #include<limits> #include <ctime> using namespace std; int wylosuj( int start, int stop ) { int losowanie =( rand() %( stop + 1 - start ) + start ); return losowanie; }
int main() { srand( time( NULL ) ); int start; cout << "Podaj przedzial od: " << endl; while( !( cin >> start ) ) { cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cout << "jeszcze raz podaj dolna granica przedzialu!!!" << endl; }; int stop; cout << "Do: " << endl; while( !( cin >> stop ) ) { cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); cout << "jeszcze raz podaj gorna granice przedzialu!!!" << endl; }; int ile = 20; while( ile-- ) cout << wylosuj( start, stop ) << endl; return 0; }
bo są błędy przy int losowanie. |
jest ok. Może spróbuj przebudować projekt bo program kompiluje się poprawnie |
|
Balto11181 Temat założony przez niniejszego użytkownika |
» 2016-10-05 21:21:57 Z ciekawości co znaczy linijka z ignore, nie miałem tego w kursie także, warto poszerzyć wiedzę. Pomijając ten fakt dzięki, w ogóle za pomoc :) |
|
carlosmay |
» 2016-10-05 21:40:38 |
|
Balto11181 Temat założony przez niniejszego użytkownika |
» 2016-10-05 23:59:22 cin.ignore( numeric_limits < streamsize >::max(), chodzi o tą linijkę. Streamsize |
|
carlosmay |
» 2016-10-06 07:13:10 |
|
« 1 » |