Richiamo funzione

di il
4 risposte

Richiamo funzione

Ho scritto questa semplice funzione che mi serve per contare le lettere inserite da tastiera in una stringa ma ho problemi col suo richiamo; sto facendo un po' pratica con funzioni con parametri strutturati e questo esercizio mi ha messo davanti alcune difficoltà.
vi prego di corredare la correzione con qualche commento che mi dia un'idea un po' più chiara del perchè ci sia l'errore e come si lavori coi tipi strutturati.
qui il codice
#include <iostream>
using namespace std;

int numero_lettere (char p[])       // contalettere
{for (int i=0; p[i]!= '/0';i++)
return i+1;}

int main()
{char parola [50];
cout<<"inserire parola"<<endl;
cin>> parola[50];
cout<<"il numero di lettere della parola e";
cout<<numero_lettere (parola[50]); }
grazie mille a tutti

4 Risposte

  • Re: Richiamo funzione

    Aggiornamento:
    modificando
    cout<< numero_lettere (parola[]); 
    in
    cout<< numero_lettere (parola);
    il programma viene compilato correttamente, tuttavia quando inserisco una parola esso non mi restituisce alcun numero
    p.s. ho cambiato anche il contatore in
    int numero_lettere (char p[])       // contalettere
    {int i=0; while (p[i]!='/0') {i++;}
    return i;}
    che mi sembra meno cervellotico ma comunque non funziona
  • Re: Richiamo funzione

    E' un bel casino, senza entrare troppo in sottigliezze:
    
    #include <iostream>
    using namespace std;
    
    int numero_lettere(char p[], int size)       // contalettere
    {
    	int i;
    	for ( i = 0; ((p[i] != '\0') && (i<size)); i++);
    
    	return i;
    }
    
    int main()
    {
    	char parola[50];
    	cout << "inserire parola" << endl;
    	cin >> parola;
    	cout << "il numero di lettere della parola e': ";
    
    	cout << numero_lettere(parola, 50) << endl;
    }
    
    1) facendo cin >> parola[50]; stai dicendo che vuoi prendere dall'utente un singolo carattere. Inoltre un array di 50 elementi ha come ultimo indice 49, quindi parola[50] non esiste e stai "selezionando" un carattere oltre il limite.
    2) La funzione che conta i caratteri è completamente sbagliata:
    a) se dichiari una variabile nel corpo del for tale variabile sarà visibile solo all'interno del for.
    b) l'istruzione di return è all'interno del for quindi al primo ciclo torna direttamente al main e torna sempre il valore 1 (i+1)
    c) la lunghezza dell testo non deve considerare il terminatore di stringa
    d) il carattere terminatore della stinga è '\0'
    e) anche qui devi tenere conto della lunghezza dell'array che viene passato, altrimenti rischi di "selezionare" degli indici oltre i limiti dell'array

    Vedi il codice corretto e fammi sapere, rispetto a quegli errori che ti ho segnalato, se capisci le correzioni.
  • Re: Richiamo funzione

    b) l'istruzione di return è all'interno del for quindi al primo ciclo torna direttamente al main e torna sempre il valore 1 (i+1)"
    per ovviare a questo problema hai messo il ; dopo il corpo del for, giusto?
    dopo queste correzioni e cambiando il contatore dal ciclo for al while (per controllare se avessi capito) la funzione l'ho scritta così:
    int numero_lettere(char p[], int max)       // contalettere
    {int i;
    while (p[i]!='\0' && i<max) {i++;};
    return i;}
  • Re: Richiamo funzione

    raffxy1211 ha scritto:


    b) l'istruzione di return è all'interno del for quindi al primo ciclo torna direttamente al main e torna sempre il valore 1 (i+1)"
    per ovviare a questo problema hai messo il ; dopo il corpo del for, giusto?
    dopo queste correzioni e cambiando il contatore dal ciclo for al while (per controllare se avessi capito) la funzione l'ho scritta così:
    int numero_lettere(char p[], int max)       // contalettere
    {int i;
    while (p[i]!='\0' && i<max) {i++;};
    return i;}
    Aveva senso per il for perchè non avevi messo le graffe, il tuo while attuale apre e chiude il ciclo, quindi il punto e virgola non è necessario
Devi accedere o registrarti per scrivere nel forum
4 risposte