[C] Assegnazione valori a stringhe

di il
14 risposte

[C] Assegnazione valori a stringhe

Ciao ragazzi questo programma doveva chiedere in input il nome e i 2 voti in mate e in ita di n alunni per poi stampare il nome dell alunno con la media massima allegata. insomma il nome dell aluno con la media max e la media max per essere più chiari.
int main()
{
    int i=0,n;
    float v1,v2,media,max=0;
  char nome[15];
  char  nomemax [15];
 printf("Inserisci il numero di alunni da considerare: ");
 scanf(" %d", &n);
    while(i<n )
    {
        printf("\nInserisci il nome dell alunno: ");
        scanf(" %s", &nome[15]);
        printf("\nInserisci il voto in italiano: ");
        scanf(" %f", &v1);
        printf("\nInserisci il voto in matematica: ");
        scanf(" %f", &v2);
        media=(v1+v2)/2;
        printf("\nLa sua media e': %.1f \n",media);

        i++;
        if(media>max)
        {
          max=media;

          nomemax[15]=nome[15];
         printf("\nLa media maggiore fin ora e' di %s ed e' %f\n",nomemax[15],max);

        }
    }

    printf("\nIl media maggiore sara' %.1f ed e' di %s",max,nomemax[15]);
getchar();
getchar();
return 0;
}
ecco il codice non capisco come assegnare nomemax a nome in modo da far uscire il nome dell alunno con la media max.
grazie dell'aiuto
ps: mi da <null> al posto del nomemac che dovrebbe risultare. Ciaoo e grazie in anticipo

14 Risposte

  • Re: [C] Assegnazione valori a stringhe

    char c1 = 'a';
    char c2 = 'b';
    
    c2 = c1;
    oppure, se intendi i caratteri di una stringa:
    char str[40];
    strcpy(str,"ciao");
    printf("%s\n", str);
    str[2]=str[3];
    printf("%s\n", str);
  • Re: [C] Assegnazione valori a stringhe

    Se provavi da solo facevi prima...
  • Re: [C] Assegnazione valori a stringhe

    Infatti non mi sono espresso bene andate a vedere il post che ho fatto sopra se volete avere chiarimenti su quello che intendevo grazie mille in anticipo
  • Re: [C] Assegnazione valori a stringhe

    Per copiare le stringhe utilizza la strcpy

    Le stringhe sono rappresentate dai nomi, nelle funzioni devi scrivere nomemax e non nomemax[15]
  • Re: [C] Assegnazione valori a stringhe

    Non so perchè ma l esecuzione mi da questo nonostante io abbia corretto l errore: http://prntscr.com/d3ptk
  • Re: [C] Assegnazione valori a stringhe

    Oltre a fare e seguire il consiglio di Oregon ricordati che quando prendi in input una stringa non devi mettere la & : scanf("%s",nome);
  • Re: [C] Assegnazione valori a stringhe

    Devi sempre mostrare COME hai modificato il codice perché non l'avrai fatto correttamente e, se non lo mostri nuovamente, non possiamo dirti nulla ...
  • Re: [C] Assegnazione valori a stringhe

    Ecco il codice
    #include <stdio.h>
    
    
    
    int main()
    {
        int i=0,n;
        float v1,v2,media,max=0;
      char  nome[15], nomemax[15] ;
     printf("Inserisci il numero di alunni da considerare: ");
     scanf(" %d", &n);
        while(i<n )
        {
    
            printf("\nInserisci il nome dell alunno: ");
            scanf(" %s", &nome[15]);
            printf("\nInserisci il voto in italiano: ");
            scanf(" %f", &v1);
            printf("\nInserisci il voto in matematica: ");
            scanf(" %f", &v2);
            media=(v1+v2)/2;
            printf("\nLa sua media e': %.1f \n",media);
    
            i++;
            if(media>max)
            {
              max=media;
    
              nomemax[15]=nome[15];
             printf("\nLa media maggiore fin ora e' di %s ed e' %.1f\n",nomemax,max);
    
            }
        }
    
        printf("\nIl media maggiore sara' %.1f ed e' di %s",max,nomemax);
    getchar();
    getchar();
    return 0;
    }
    
  • Re: [C] Assegnazione valori a stringhe

    Beh, allora non hai capito o non hai letto ... C'è ancora scritto

    scanf(" %s", &nome[15]);

    e qui

    nomemax[15]=nome[15];

    non hai usato la funzione strcpy come ti avevo detto.
  • Re: [C] Assegnazione valori a stringhe

    Non capisco cosa cosa dovrei farmene di strcpy come faccio a trasferire il caratteri della stringa ad un altra , ho provato a cercare su internet ma non trovo soluzioni accettabili e se tolgo la dimensione della stringa a nomemax[15]=nome[15]; va in errore ho tolto l & a nome inoltre. Te ne sarei molto grato se mi dessi dei chiarimenti aggiuntivi purtroppo ho iniziato da poco il C e sto avendo molti problemi del genere. Questo è l errore esattamente : http://prntscr.com/d3qr7
  • Re: [C] Assegnazione valori a stringhe

    Sono riuscito a capire come usare strcpy ecco il risultato:
    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        int i=0,n;
        float v1,v2,media,max=0;
      char  nome[1000], nomemax[1000] ;
     printf("Inserisci il numero di alunni da considerare: ");
     scanf(" %d", &n);
        while(i<n )
        {
    
            printf("\nInserisci il nome dell alunno: ");
            scanf(" %s", nome);
            printf("\nInserisci il voto in italiano: ");
            scanf(" %f", &v1);
            printf("\nInserisci il voto in matematica: ");
            scanf(" %f", &v2);
            media=(v1+v2)/2;
            printf("\nLa sua media e': %.1f \n",media);
            strcpy(nome, nomemax);
            i++;
            if(media>max)
            {
              max=media;
    
    
    
             printf("\nLa media maggiore fin ora e' di %s ed e' %.1f\n",nomemax,max);
    
            }
        }
    
        printf("\nIl media maggiore sara' %.1f ed e' di %s",max,nomemax);
    getchar();
    getchar();
    return 0;
    }
    
    Ho provato a mettere strcpy sia dentro che fuori dall if ma il risultato è lo stesso(ovviamente), non capisco cos'altro posso aver sbagliato... al posto del nome risultano fuori caratteri che non centrano niente: http://prntscr.com/d3r00
  • Re: [C] Assegnazione valori a stringhe

    La cosa che devi capire è che una stringa è un vettore di caratteri, dopo questa considerazione risulta abbastanza chiaro che per copiare un nome (stringa) te devi copiare tutti i caratteri e non solo il carattere 15, questa cosa la puoi fare usando un ciclo for esempio:
    for (i=0;i<15;i++)
    copia[i]=nome [i];
    Oppure usando la funzione strcpy che sostanzialmente fa la stessa cosa.....

    La stessa considerazione va fatta per l'input.....

    La funzione strcpy riceve come parametri prima la destinazione e poi la sorgente, tu hai fatto il contrario....
    Per vedere i parametri di una funzione basta cercare su google il nome della funzione....
    http://digilander.libero.it/uzappi/C/librerie/funzioni/strcpy.html
  • Re: [C] Assegnazione valori a stringhe

    Grazie mille ho fatto una stupidagine scusami... Ora finalmente funziona!!
    Grazie a tutti per il tempo e per l'attenzione
  • Re: [C] Assegnazione valori a stringhe

    Per risponderti alla domanda :
    
    char c,str[15];
        int i;
        for(i=0;i<15&&c!='\n';i++){
            scanf("%c",&c);
            if(c!='\n')
                str[i]=c;
            else
                str[i]='\0';
        }
    
    In modo equivalente:
    
    char str[15];
    scanf("%s",str);
    
    Qua viene spiegato tutto (sempre con una ricerca google....):
Devi accedere o registrarti per scrivere nel forum
14 risposte