Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    Passare come parametro una stringa e utilizzare la funzione strcmp

    Ragazzi io ho la seguente funzione:

    codice:
    #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!
    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    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ì :

    codice:
    void CercaConcorrente(Concorrente* record, char *cerca, int N)
    E comunque ho dato uno sguardo veloce al codice e credo che dovresti fare alcune modifiche:

    codice:
    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:

    codice:
    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

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303

    Moderazione

    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.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.