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

    [c++] Principiante: il compilatore da un errore che non conosco!

    Sono un principiante che studio C++ al liceo da si e nò un anno scolastico e volendo gasarmi ho cercato di fare un softwarino a consolle in c++ che riproducesse il gioco della battaglia navale...

    creare quindi 2 array bidimensionali (matrici) piene di 0 e posizionare in entrambi 5 numeri 1 (che sarebbero le barchette) poi chiedere ai 2 giocatori le coordinate e verificarne la presenza di un 1.
    logicamente vince che scopre dove sono tutti gli uno dell'avversario!

    solo che ho problemi nelle prime righe del file... dove ho messo una funzione per riempire le tabelle di 0 e dove ho mesos quella per caricarla (il gioco vero e proprio devo ancora farlo, per ora ho aggiunto solo un logo e le istruzioni e un ciclo di ripetizione del programma).

    posso postare parte del sorgente!? grazie
    Il software è come il sesso: libero è meglio!

  2. #2
    ahh.. come compilatore sto usando Dev C++ 4.9.9.2 (scaricato dal sito Bloodshed).
    l'errore che mi da è il seguente:

    "invalid conversion from `int' to `int (*)[5]' "
    "initializing argument 1 of `void AZZERA(int (*)[5])' "

    ..e questo per ogni Funzione richiamata nel main...

    PS ho anche visual C++ ma non capisco come si usa.. cè una guida su html!?
    grazie!
    Riccardo
    Il software è come il sesso: libero è meglio!

  3. #3
    Sembrano errori logici, tipo hai provato a passare un array per valore invece che per riferimento!
    Prova a postare il codice..
    Powered by Fedora & CentOS
    Here I am, brain the size of a planet..

  4. #4

    #include<iostream.h>
    int MARE1 [5][5],MARE2 [5][5];
    void AZZERA (int [5][5]),CARICA (int [5][5]);
    int main()
    {
    do
    {
    char RIPETI;
    AZZERA (MARE1 [5][5]);
    AZZERA (MARE2 [5][5]);
    cout<<" GIOCATORE A: "<<endl;
    CARICA (MARE1 [5][5]);
    cout<<" GIOCATORE B: "<<endl;
    CARICA (MARE2 [5][5]);
    cout<<"Volete giocare un altra partita? (s/n) ";
    cin>>RIPETI;
    }while(RIPETI=='s');
    getchar();
    getchar();
    }

    void AZZERA(int MARE [5][5])
    {
    int C,R;
    for(R=0;R<5;R++)
    for(C=0;C<5;C++)
    MARE[R][C]=0;
    }

    void CARICA(int MARE [5][5])
    {
    int C,R,NAVE;
    for(NAVE=0;NAVE<5;NAVE++)
    {
    NAVE++;
    cout<<"Ora inserirai 5 navi."<<endl;
    cout<<"Definisci la riga per la nave numero "<<NAVE<<": "<<endl;
    cin>>R;
    cout<<"Definisci la colonna per la nave numero "<<NAVE<<": "<<endl;
    cin>>C;
    MARE[R][C]=1;
    }
    cout<<" "<<endl;
    return;
    }


    ecco il sorgente... ho tolto tutte le righe inutili, lascaindovi solo ciò che mi segnala come errore...
    Il software è come il sesso: libero è meglio!

  5. #5
    Questo funziona..
    codice:
    #include<iostream>
    using std::cout;    // devi usare i namespace
    using std::endl;
    using std::cin; 
    
    int MARE1 [5][5],MARE2 [5][5];
    void AZZERA (int [5][5]),CARICA (int [5][5]);
    
    int main()
    {
    	char RIPETI;    // se lo metti dentro non arriva al while
    	do
    	{
    		
    		AZZERA (&MARE1[5]);    // attento a come passi un array
    		AZZERA (&MARE2[5]);
    		cout<<" GIOCATORE A: "<<endl;
    		CARICA (&MARE1[5]);
    		cout<<" GIOCATORE B: "<<endl;
    		CARICA (&MARE2[5]);
    		cout<<"Volete giocare un altra partita? (s/n) ";
    		cin>>RIPETI;
    	}
    	while(RIPETI=='s');
    	getchar();
    	getchar();
    	return 0;   // deve ritornare un intero se e' di tipo int il main
    }
    
    void AZZERA(int MARE [5][5])
    {
    	int C,R;
    	for(R=0;R<5;R++)
    		for(C=0;C<5;C++)
    			MARE[R][C]=0;
    }
    
    void CARICA(int MARE [5][5])
    {
    	int C,R,NAVE;
    	for(NAVE=0;NAVE<5;NAVE++)
    	{
    		NAVE++;
    		cout<<"Ora inserirai 5 navi."<<endl;
    		cout<<"Definisci la riga per la nave numero "<<NAVE<<": "<<endl;
    		cin>>R;
    		cout<<"Definisci la colonna per la nave numero "<<NAVE<<": "<<endl;
    		cin>>C;
    		MARE[R][C]=1;
    	}
    	cout<<" "<<endl;
    }
    Powered by Fedora & CentOS
    Here I am, brain the size of a planet..

  6. #6
    eh gfrazie mille!

    comunque non ho mai usato i namespace e sinceramente non so nemmeno cosa sono! quindi... a cosa servono!?

    ah.. poi non avevo nemmeno mai messo il return alla fine del main... devo sempre metterlo se scrivo int main? sempre con 0 poi?
    ho provato per curiosità a scrivee void main.. ma non compila... ma ci potrebbe essere un modo per usare void main? o non ha senso?

    come vedete sono proprio alle prime armi! però intanto grazie mille!
    Il software è come il sesso: libero è meglio!

  7. #7
    Originariamente inviato da Il Pinna
    comunque non ho mai usato i namespace e sinceramente non so nemmeno cosa sono! quindi... a cosa servono!?
    Ti mando direttamente QUI

    Originariamente inviato da Il Pinna
    ah.. poi non avevo nemmeno mai messo il return alla fine del main... devo sempre metterlo se scrivo int main? sempre con 0 poi?
    Ti ho messo return 0 perche' ho visto che il tuo main aveva tipo int e non puo' non tornare un intero.. puoi mettere anche 42 non c'e' problema... credo!

    Originariamente inviato da Il Pinna
    ho provato per curiosità a scrivee void main.. ma non compila... ma ci potrebbe essere un modo per usare void main? o non ha senso?
    se metti void non puo' ritornare nulla..
    cmq.. in genere io non metto nessun tipo di ritorno nel main(), ad esempio:
    codice:
    main()
    { cout<<"Hello World"<<endl; }
    Powered by Fedora & CentOS
    Here I am, brain the size of a planet..

  8. #8
    ..sempre piu grazie!

    ora altre domande!
    1) allora... nell'inserimento dei nomi dei giocatori io ho caricato così:

    cout<<"giocatore 1, NOME: ";
    cin>>A>>B>>C>>D>>E>>F;

    e dopo:

    cout<<A<<B<<C<<D<<E<<F<<"! tocca a te! "<<endl;


    solo che così facendo devo per forza mettere un nome di 6 lettere....!
    non cè un modo per inserire nomi interi!?

    ri-grazie (avevo anche un altra domanad ma che ora mi sfugge)
    Il software è come il sesso: libero è meglio!

  9. #9
    Perché memorizzi separatamente i singoli caratteri? Basta dichiarare un array di caratteri per il nome:
    codice:
    char nome[16]="";
    //Legge il nome
    cin>>nome;
    //Scrive il nome
    cout<<nome;
    P.S.: lo standard de facto dei nomi in C/C++ è che solo i nomi delle macro siano scritti tutti in maiuscolo, mentre quelli di funzioni e di variabili in minuscolo (con eventualmente le iniziali delle parole di cui sono composti in maiuscolo); ti consiglio di adeguarti, perché in questo modo il codice risulta più comprensibile anche a chi lo vede per la prima volta .
    Amaro C++, il gusto pieno dell'undefined behavior.

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.