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

Lekcja 17 zad.3

Ostatnio zmodyfikowano 2017-03-15 04:56
Autor Wiadomość
IceMan85PL
Temat założony przez niniejszego użytkownika
Lekcja 17 zad.3
» 2017-03-14 19:45:54
Wiatm. Czy moze mi ktos wyjasnic dlaczego moja funkcja losowanie() w zadaniu zwraca wartosc z wylosowanej liczby choc nie dodalem kluczowego slowa
return a;
. Tresc zadania: Napisz funkcję, która losuje liczbę z przedziału od 50 do 60 włącznie. Wywołaj funkcję kilka razy (wypisz wylosowane wartości na ekran) w celu przetestowania czy działa ona poprawnie.
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int losowanie()
{
    int a;
    a =( rand() % 11 ) + 50;
}

int main()
{
    srand( time( NULL ) );
    cout << losowanie() << endl << losowanie() << endl << losowanie() << endl << losowanie();
   
   
    return 0;
}
P-158993
czaffik
» 2017-03-14 20:31:26
No proszę jaka ciekawostka. Myślałem że możliwość pominięcia instrukcji return w C++ jest "błędem" (poniekąd jest, może prowadzić do niezrozumiałych wyników), a tu funkcja zwraca ostatnią wartość jaka nawinęła jej się na rękę. Jednak uwaga, wystarczy że dodasz jakąś nową instrukcję za przypisaniem "a" i już wyskakują ci "naprawdę losowe wartości". Nie jestem w stanie odpowiedzieć czy twórcy kompilatora postanowili tak sobie zrobić czy to standard c++.
P-158998
Elaine
» 2017-03-15 04:56:35
To, że tak się stało, to czysty przypadek, bo może stać się cokolwiek. 6.6.3/2:
Flowing off the end of a constructor, a destructor, or a function with a cv void return type is equivalent to a return with no operand. Otherwise, flowing off the end of a function other than main (3.6.1) results in undefined behavior.

Oczywiście w praktyce to nie jest problem, bo jeśli używa się -Werror=return-type, to kompilator wyrzuca błąd.
P-159015
« 1 »
  Strona 1 z 1