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

Błąd kompilacji "declaration of 'int a ' shadows a parameter"

Ostatnio zmodyfikowano 2016-07-17 13:55
Autor Wiadomość
Anonim47
Temat założony przez niniejszego użytkownika
Błąd kompilacji "declaration of 'int a ' shadows a parameter"
» 2016-07-15 20:46:05
Witam.
Nie mogę znaleźć błędu kompilacji.
error: declaration of 'int a ' shadows a parameter
error: declaration of 'int b ' shadows a parameter

Funkcja jest do losowania liczb z przediału (np.od 50 do 60)
C/C++
int losuj( int a, int b )
{
    int a, b, c;
    srand( time( NULL ) );
    (( rand() % b ) + a );
    c =(( rand() % b ) + a );
    return c;
}
Oczywiście dodałem też biblioteki
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
P-150004
karambaHZP
» 2016-07-15 20:50:09
Tylko
int c;
 zostaw.
P-150005
Anonim47
Temat założony przez niniejszego użytkownika
» 2016-07-15 20:55:58
Nie mogę, ponieważ wywołuje ja w main()

To cały kod
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;
int wczytajLiczbeA()
{
    int a;
    do {
        cin.clear();
        cin.sync();
        cout << "Podaj liczbe z pierszego przedzialu do losowania (A):";
        cin >> a;
        cout << "\n";
        if( cin.good() )
             return a;
       
    }
    while( cin.fail() );
   
    return a;
}
int wczytajLiczbeB()
{
    int b;
    do {
        cin.clear();
        cin.sync();
        cout << "Podaj druga liczbe z przedzialu do losowaia (B):";
        cin >> b;
        cout << "\n";
        if( cin.good() )
             return b;
       
    }
    while( cin.fail() );
   
    return b;
}
int losuj( int a, int b )
{
    int a, b, c;
    srand( time( NULL ) );
    (( rand() % b ) + a );
    c =(( rand() % b ) + a );
    return c;
}
int main()
{ int a, b;
    a = wczytajLiczbeA();
    b = wczytajLiczbeB();
    losuj( a, b );
   
    return 0;
}
P-150006
Gibas11
» 2016-07-15 21:05:14
Możesz, a i b są zadeklarowane jako parametry, więc nie musisz tego robić ręcznie niżej.
P-150007
karambaHZP
» 2016-07-15 21:10:58
Czytaj komunikat. Deklarując zmienne a i b zakrywasz parametry funkcji.
P-150008
Anonim47
Temat założony przez niniejszego użytkownika
» 2016-07-15 21:19:05
Działa dzięki.
Ale teraz losują mi się liczby nie z tego zakresu co chce.
np. podajc liczbe a 50 i b 60 to wynik losowania wynosi 89.
i jeszcze jeden błąd w  mojej funkcji to jak wywołam kilka razy funkje losuj(a, b)to te same liczby losuje.

Problem rozwiązałem. Zrobiłem złą funkcje do losowania liczb z przedziału. Poprawna funkcja to:
C/C++
int losuj( int a, int b )
{
    int c, d;
    srand( time( NULL ) );
    d = a - b;
    (( rand() % d ) + a );
    c =(( rand() % d ) + a );
    return c;
}

A drugi problem to rozwiązałem dodając funkcje Sleep(1000)
C/C++
int a, b, x;
a = wczytajLiczbeA();
b = wczytajLiczbeB();
for( int i = 1; i <= 10; i++ )
{
    x = losuj( a, b );
    cout << x << "\n";
    Sleep( 1000 );
}
return 0;
  i dołączenie biblioteki #include <windows.h>
P-150010
karambaHZP
» 2016-07-15 21:42:11
Źle używasz [a href="http:www.cplusplus.comreferencecstdlibrand"" name="rand()"]
Jeśli chcesz liczb z zakresu od do poczytaj o <random>.
P-150012
carlosmay
» 2016-07-15 22:28:31
P-150015
« 1 » 2
  Strona 1 z 2 Następna strona