PDA

Visualizza la versione completa : [C++] Passare come parametro una stringa e utilizzare la funzione strcmp


gaten
11-02-2009, 18:40
Ragazzi io ho la seguente funzione:



#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;

struct Concorrente {
char nome[30];
char nazione[30];
int eta;
int posizione;
};

void InserisciRecord(Concorrente &record);
void CercaConcorrente(Concorrente &record, char *cerca, int N);

int _tmain(int argc, _TCHAR* argv[])
{
Concorrente Giocatore[30];
int i, N;
char cerca[30];

do
{
cout << "Quanti concorrenti vuoi inserire:\n";
cin >> N;
}
while(!(N >= 2) && (N < 100));

for (i = 0; i < N; i++)
InserisciRecord(Giocatore[i]);

cout << "Inserisci il nome del concorrente da ricercare:\n";
cin >> cerca;

CercaConcorrente(Giocatore, &cerca, N);

return 0;
}

void InserisciRecord(Concorrente &record)
{
cout << "Inserisci il nome del concorrente:\n";
cin >> record.nome;
cout << "Inserisci la nazionalita' del concorrente:\n";
cin >> record.nazione;
cout << "Inserisci l'eta' del concorrente:\n";
cin >> record.eta;
cout << "Inserisci la posizione del concorrente:\n";
cin >> record.posizione;
}

void CercaConcorrente(Concorrente &record, char *cerca, int N)
{
int c = 0;
int flag = 1;
do
{
c++;
if (strcmp(cerca, record.nome) == 0)
{
cout << "Nome: " << record.nome;
cout << "\nNazionalita': " << record.nazione;
cout << "\nEta': " << record.eta;
cout << "\nPosizione: " << record.posizione;
flag = 0;
}
}
while(c < N);

if (flag == 1)
cout << "Non esiste nessun concorrente col nome " << record.nome << " che ha partecipato";
}


Adesso a questa funzione dovrei passare come parametro la stringa cerca, la quale inserisco nel main nel seguente modo:

cin >> cerca;

Adesso ho 2 problemi, come posso effettuare il controllo con "cerca" e "record.nome" utilizzando la funzione strcmp per vedere se sono uguali?

come devo richiamare la funzione?

Passo bene la stringa come parametro?

Precisamente gli errori che mi dà sono questi:

error C2664: 'CercaConcorrente': impossibile convertire il parametro 1 da 'Concorrente [30]' a 'Concorrente &'

Grazie anticipatamente!

KrOW
11-02-2009, 19:25
Ciao... La prossima volta che posti, per il codice, usa il tag code... Detto questo il compilatore giustamente protesta perchè passi un array di Concorrenti alla funzione quando la funzione stessa vuole un riferimento a Concorrenti. Quindi dovresti cambiare il prototipo della funzione così :



void CercaConcorrente(Concorrente* record, char *cerca, int N)

E comunque ho dato uno sguardo veloce al codice e credo che dovresti fare alcune modifiche:



do
{
cout << "Quanti concorrenti vuoi inserire:\n";
cin >> N;
}
while(!(N >= 2) && (N <= 30)); // Per non sforare i limiti dell' array
for (i = 0; i < N; i++)
InserisciRecord(Giocatore[i]);
cout << "Inserisci il nome del concorrente da ricercare:\n";
cin >> cerca;
CercaConcorrente(Giocatore, cerca, N); // Qui devi passere il puntatore e non il suo indirizzo
return 0;
}

Qui invece:



void CercaConcorrente(Concorrente* record, char *cerca, int N) // Come il prototipo modificato
{
for(int i=0; i<N; i++)
{
if (strcmp(cerca, record[i].nome) == 0) // Qui devi accedere elemento per elemento
{
cout << "Nome: " << record[i].nome<<endl; // Usa endl per andare a nuova riga
cout << "Nazionalita': " << record[i].nazione<<endl;
cout << "Eta': " << record[i].eta<<endl;
cout << "Posizione: " << record[i].posizione<<endl;
return;
}
}
// Se non è stato trovato
cout << "Non esiste nessun concorrente col nome " << cerca << " che ha partecipato";
}

Comunque ti consiglio di dare una ripassatina ai puntatori e agli array... Ciao :ciauz: :ciauz:

LeleFT
12-02-2009, 08:29
Come già detto da KrOW, quando si posta il codice vanno usati gli appositi tag CODE (come indicato nel Regolamento).
Sempre secondo il regolamento, il linguaggio va espressamente indicato nel titolo.
Aggiunto anche questo.


Nel tuo post li ho aggiunti io.


Ciao. :ciauz:

Loading