Leggere e stampare una stringa con i sottoprogrammi

di il
1 risposte

Leggere e stampare una stringa con i sottoprogrammi

Ciao ragazzi praticamente devo scrivere un programma : "tramite l'uso di sottoprogrammi leggere e stampare una stringa", ma non appena vado ad eseguirlo mi stampa dei caratteri che non corrispondono alla stringa che ho inserito, cosa ho sbagliato?

#include<stdio.h>
#include<string.h>

 void lettura( char campo[], int MAX);
 void stampa(char campo[]);
 
 main(){
 	const int card=100;
 	int i;
 	char Vet[card];
 
       
	   printf("inserisci una stringa:\n");
	    lettura(Vet,card);
        stampa(Vet);
  }
 
 void lettura( char campo[], int MAX){
 	int i=0;
 	char c;
 
 	while((c=getchar()!='\n')&&(i<MAX)){
 		campo[i]=c;
 		i++;
	 }
   campo[i]='\0';
 
 }
 
 
 
 void stampa(char campo[]){
 	int i=0;
 	
 	printf("stringa immessa:\n");
 	 while(campo[i]!='\0'){
 	       printf("%c",campo[i]);
 	       i++;
	  }
 }

1 Risposte

  • Re: Leggere e stampare una stringa con i sottoprogrammi

    Ci sono diversi errori:
    1) Il main si definisce così:
    
    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    {
        return EXIT_SUCCESS;
    }
    
    oppure se servono gli argomenti da linea di comando
    
    #include <stdio.h>
    #include <stdlib.h>
    int main(int argv,char **argv)
    {
        return EXIT_SUCCESS;
    }
    
    2)
    
    while((c=getchar()!='\n')&&(i<MAX))
    
    Qui devi controllare quale operatore ha la precedenza. Ricorda che l'assegnamento ha la priorità più bassa.
    3) Occhio a MAX. Rischi un buffer overflow (errore STATUS_ACCESS_VIOLATION se usi Windows,SIGSEGV se usi Linux).
    4) Dichiarare una costante con il qualificatore const non è una buona idea. Meglio usare le direttive del preprocessore C,come #define.
    5) Per i contatori,le dimensioni etc è bene usare size_t come tipo.
    6) Non controlli che i puntatori passati alle funzioni siano validi.
    7) Perché le funzioni dovrebbero essere void? Meglio fare qualcosa del genere
    
    .....
    #include <stdbool.h>
    static bool lettura(......);
    


    o se ti è stato imposto di adeguarti al C89
    
    typedef enum {FALSE,TRUE} boolean_t;
    
    static boolean_t lettura(......);
    
    ..in modo da avere un feedback dalla funzione e sapere così se ha avuto successo o no.

    8 ) Devi essere coerente con lo stile di programmazione che adotti: se inizi a scrivere gli identificatori in minuscolo non puoi in seguito scrivere le iniziali in maiuscolo. È assolutamente vietato scrivere i nomi di variabili interamente in maiuscolo; il maiuscolo è riservato ai nomi di costanti.
Devi accedere o registrarti per scrivere nel forum
1 risposte