Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C++]aiuto col comando random

    salve raga stavo provando ad utilizzare i vettori in una struttura e per rendere il programma almeno 1 po più interessante ci ho aggiunto il comando random...
    il problema è che quando lo compilo mi riporta alla libreria stdlib.h e non so che fare...
    HELP plz
    di seguito il sorgente:



    #include <cstdlib>
    #include <iostream>
    using namespace std;
    struct studente{

    string nome[200];
    string cognome[200];
    string sezione[200];
    };
    int main(){
    int i,x,risp,k=200;
    studente alunno;
    for(i=1;i<=k;i++){
    system("CLS");
    cout<<" INSERISCI I DATI RELATIVI ALLO STUDENTE"<<endl;
    cout<<"inserisci il nome"<<endl;
    cin>>alunno.nome[i];
    cout<<"inserisci il cognome"<<endl;
    cin>>alunno.cognome[i];
    cout<<"inserisci la sezione"<<endl;
    cin>>alunno.sezione[i];
    cout<<"vuoi inserire un altro studente? 1=si/2=no"<<endl;
    cin>>risp;
    if (risp==0){
    break;
    }
    }
    x=rand(i);
    cout<<"lo studente sorteggiato e' "<<alunno.nome[x]<<endl;




    system("PAUSE");
    return EXIT_SUCCESS;
    }



    l'errore ritorna alla riga 342 della stdlib.h
    -->_CRTIMP int __cdecl rand (void);
    C++ is other

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    La rand() non vuole argomenti in input.
    Comunque ci sono altri errori...
    every day above ground is a good one

  3. #3
    ok sono riuscito a far andare il random facendo
    x=rand();
    x=(i);
    ora un'altra cosa da fixare sarebbe che se tipo alla voce:
    inserisci nome scrivo x y; mi salta il cognome cioè lo spazio mi fa saltare l'istruzione successiva...
    qualche aiuto?
    C++ is other

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    In generale se devi generare un numero a caso tra un minimo "min" e un massimo "max" (compresi) devi scrivere qualcosa come

    codice:
    min + rand()%(max-min+1);
    ricordandoti tra l'altro di inizializzare il seme del generatore pseudocasuale all'inizio del programma in maniera tale da avere sequenze di numeri "sempre" diverse (vedi srand()).

    Per il resto, ci sono errori che non riguardano l'utilizzo di rand() ma altro... per dirne uno, scrivere una cosa come alunno.nome[i] non significa "il nome dell'i-esimo alunno" ma "l'i-esimo carattere del nome dell'alunno", che è tutta un'altra cosa.
    every day above ground is a good one

  5. #5
    cioè quindi come dovrei fare?
    C++ is other

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    "alunno" deve essere un array con un certo numero di elementi, quindi andrebbe dichiarato come ad esempio "studente alunno[200]" (o "alunni"). Per accedere al campo "nome" di ogni singolo alunno ci va "alunno[i].nome", similmente per gli altri campi. Ma questi sono problemi di sintassi e di logica elementari che andrebbero studiati e risolti per conto proprio, tra l'altro non c'entrano molto con l'argomento originario del thread.
    every day above ground is a good one

  7. #7
    ok grazie dell'aiuto riflettendoci ho cambiato il vettore dalla struttura a studente alunno;
    ora l'unico dubbio è il riferimento che dicevi allo srand(); che non so che cosa perchè sul libro dove studio non ne parla quindi non ho idea di come fare a capirlo scusate per il disturbo...
    (per chi servisse l'esempio della struct ora funzionante eccola di seguito)
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    using namespace std;
          struct studente{
    
                 string nome;
                 string cognome;
                 string sezione;
                         };
    int main(){
        int i,x,risp,k=200;    
       studente alunno[k];
       for(i=1;i<=k;i++){
     system("CLS");
      cout<<"           INSERISCI I DATI RELATIVI ALLO STUDENTE"<<endl; 
      cout<<"inserisci il nome"<<endl;
      cin>>alunno[i].nome;
      cout<<"inserisci il cognome"<<endl;
      cin>>alunno[i].cognome;
      cout<<"inserisci la sezione"<<endl;
      cin>>alunno[i].sezione;
       cout<<"vuoi inserire un altro studente? 1=si/2=no"<<endl;
    cin>>risp;
       if (risp==2){
                                              break;
                                              }                
    }
        x=rand()%i;
    
        cout<<"lo studente sorteggiato e' "<<alunno[x].nome<<" "<<alunno[x].cognome<<" della "<<alunno[x].sezione<<endl;
        
        
        
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    C++ is other

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Un paio di osservazioni: dichiarare un array a size variabile ("studente alunno[k]") è una caratteristica consentita solo nel C99; al di là del fatto che sarebbe meglio evitarla sempre, tu stai programmando in C++ quindi in teoria non dovrebbe proprio esserti consentito dal compilatore dato che il C++ standard non prevede questa possibilità. Ridichiara l'array con size costante 200 oppure definisci una costante simbolica con #define e utilizza quella.

    Poi attenzione a non trabordare i limiti dell'array: se hai 200 elementi, l'indice deve andare da 0 a 199, quindi il for va riscritto con i = 0;i < k.

    Per quanto riguarda la srand(), se il libro che usi non ne parla comincia a dubitare seriamente della sua qualità perché si tratta di una funzione standard molto ricorrente. Per degli esempi di utilizzo ti basta fare delle ricerche sul web, tra l'altro la pagina che ti ho linkato prima dovrebbe andare più che bene (c'è anche un codice di esempio alla fine).
    every day above ground is a good one

  9. #9
    ok grazie....
    so comunque che il vettore non dovrebbe ami essere variabile quindi tipo x[k];
    ma non ne capisco il motivo quindi continuo così perchè credo sia una cosa migliore e non avendo problemi non trovo ancora il motivo per fermarmi...
    comunque grazie mille per l'aiuto che mi hai dato e buona giornata
    C++ is other

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.