Własna funkcja wyświetlająca losowy napis
Ostatnio zmodyfikowano 2016-12-17 23:53
barkacpers Temat założony przez niniejszego użytkownika |
Własna funkcja wyświetlająca losowy napis » 2016-12-17 20:33:49 Dzień dobry. Zacząłem programowąć w c++ od niedawna i mam problem odnośnie pewnej funkcji. Napisałem ją sam i niestety jest coś z nią nie tak, a ja nie mam pojęcia co. Mógłby ktoś coś doradzić albo nawet pokazać jak poprawić? Wrzucam kod: Chciałbym dorzucić jeszcze że w osobnym programie konsola automatycznie przestaje działaś, a w głównym programie gdzie ma być zastosowana ta funkcja jest wyświetlany napis poprawnie lecz pod nim znajduje się pewna dziwna nierówność a mianowicie coś takiego: 0 < Ór˜ Nie wiem jak temu zaradzić dlatego szukam pomocy tutaj. Z góry dziękuję za wszystkie chęci wyrażenia pomocy i pozdrawiam serdecznie. string ekran_ladowania( string tipy ) { int liczba; srand( time( NULL ) ); liczba = rand() % 10 + 1; if( liczba == 1 ) { tipy = "opcja1"; } else if( liczba == 2 ) { tipy = "opcja2; } else if( liczba == 3 ) { tipy = "opcja3"; } else if( liczba == 4 ) { tipy = "opcja4"; } else if( liczba == 5 ) { tipy = "opcja5"; } else if( liczba == 6 ) { tipy = "opcja6"; } else if( liczba == 7 ) { tipy = "opcja7"; } else if( liczba == 8 ) { tipy = "opcja8"; } else if( liczba == 9 ) { tipy = "opcja9"; } else if( liczba == 10 ) { tipy = "opcja10"; } cout << tipy; } [ / cpp ]
|
|
marcolo2307 |
» 2016-12-17 20:42:32 1. [cpp]kod[/cpp] 2. Wrzuć te tipy w tablice i losuj indeks, wtedy zamienisz te wszystkie ify na std::cout << tipy[ liczba ]; 3. Skoro nic nie zwracasz, to dlaczego funkcja jest typu string? Pewnie robisz coś w stylu: std::cout << ekran_ladowanie( "opcja" ); , więc wywołujesz funkcję i wyświetlasz to co zwracasz. Zmień ją na void lub zwróć coś. |
|
barkacpers Temat założony przez niniejszego użytkownika |
» 2016-12-17 20:56:31 Dziękuję ci poprawię na drugi raz z czytelnością postu. Z góry mówię że nie mam w głowie póki co ułożonego planu jak zrobić to pod tablicę. Czy mógłbyś zrobić jakiś przykład i mi go pokazać? Byłoby to dla mnie naprawdę pomocne. Mówiłem już że dopiero zacząłem z programowaniem, więc dzięki temu przykładowi mógłbym zrozumieć więcej. Jestem samoukiem co gorsza więc nie mam kogoś kto by mi powiedział o moich błędach w konsoli. Dziękuję również za poświęcony czas. |
|
marcolo2307 |
» 2016-12-17 21:00:04 |
|
barkacpers Temat założony przez niniejszego użytkownika |
» 2016-12-17 21:02:48 A odnośnie typu void. Nie chcę mi to zbytnio działać a pewnie robię coś źle i potrzebuję pomocy. Moim skromnym zdaniem funkcja ta miała pokazywać napis ze zmiennej string. Przeniosłem to na tablice i w sumie dalej nie wiem co robić. Dołączam kod który stworzyłem od nowa: #include <iostream> #include <conio.h> #include <cstdlib> #include <windows.h> #include <stdio.h> #include <math.h> #include <clocale> #include <ctime>
using namespace std;
string niewiem, tipy;
void ekran_ladowania() { string ekran_lad[ 10 ]; ekran_lad[ 0 ] = "opcja1"; ekran_lad[ 1 ] = "opcja2"; ekran_lad[ 2 ] = "opcja3"; ekran_lad[ 3 ] = "opcja4"; ekran_lad[ 4 ] = "opcja5"; ekran_lad[ 5 ] = "opcja6"; ekran_lad[ 6 ] = "opcja7"; ekran_lad[ 7 ] = "opcja8"; ekran_lad[ 8 ] = "opcja9"; ekran_lad[ 9 ] = "opcja10"; int liczba; srand( time( NULL ) ); liczba = rand() % 10 + 1; if( liczba == 1 ) { cout << ekran_lad[ 0 ] << endl; } else if( liczba == 2 ) { cout << ekran_lad[ 1 ] << endl; } else if( liczba == 3 ) { cout << ekran_lad[ 2 ] << endl; } else if( liczba == 4 ) { cout << ekran_lad[ 3 ] << endl; } else if( liczba == 5 ) { cout << ekran_lad[ 4 ] << endl; } else if( liczba == 6 ) { cout << ekran_lad[ 5 ] << endl; } else if( liczba == 7 ) { cout << ekran_lad[ 6 ] << endl; } else if( liczba == 8 ) { cout << ekran_lad[ 7 ] << endl; } else if( liczba == 9 ) { cout << ekran_lad[ 8 ] << endl; } else if( liczba == 10 ) { cout << ekran_lad[ 9 ] << endl; } }
int main() { cout << ekran_ladowania(); return 0; }
|
|
michal11 |
» 2016-12-17 21:54:35 Jaki jest sens tablic w twoim kodzie skoro dalej masz ifa na 10 pozycji? std::string GetRandomString() { const int TabSize = 10; std::string tab[ TabSize ]; for( int i = 0; i < TabSize; ++i ) { tab[ i ] = "opcja" + std::to_string( i + 1 ); } const int RandomIndex = rand() % TabSize; return tab[ RandomIndex ];
srand wołasz raz, na początku maina. Edit. jeżeli twoja funkcja ma zawsze zwracać ten sam tekst tylko z innym numerkiem to można to zrobić po prostu tak std::string RandomNumber( const std::string & base, int min, int max ) { return base + std::to_string( min +( std::rand() %( max - min + 1 ) ) ); }
a jeżeli chcesz mieć różne nazwy opcji no to niestety sam je musisz sobie wpisać ale losowanie zrobić tak jak w pierwszym moim kodzie. |
|
barkacpers Temat założony przez niniejszego użytkownika |
» 2016-12-17 22:04:54 Mógłbyś mi dokładnie opisać co dzieje się w każdej linijce? Średnio rozumiem jak mam to podstawić pod mój zamysł. |
|
marcolo2307 |
» 2016-12-17 23:53:43 std::string GetRandomString() { const int TabSize = 10; std::string tab[ TabSize ]; for( int i = 0; i < TabSize; ++i ) { tab[ i ] = "opcja" + std::to_string( i + 1 ); } const int RandomIndex = rand() % TabSize; return tab[ RandomIndex ];
|
Drugi kod po prostu pobiera tekst jako argument i dopisuje do niego wylosowaną liczbę z przedziału. |
|
« 1 » |