Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C] Funzione strcpy...

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    95

    [C] Funzione strcpy...

    Ciao, devo creare un array di strutture e implementare due funzioni con prototipo: void fill_student(int student_at_index) e void print_student(int student_at_index).

    Esercizio.c
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include "Studente.h"
    #define NUMELEMENTS 15
    
    void fill_student(int);
    void print_student(int);
    
    struct studente studenti[NUMELEMENTS];
    
    int main(void) {
          
        fill_student(0);
        print_student(0);
            
        printf("\n");    
        system("pause");
        return 0;
    }
    
    void fill_student(int student_at_index) {
    
        studenti[student_at_index].nome = "Tizio";
        studenti[student_at_index].cognome = "Caio";
        studenti[student_at_index].matricola = student_at_index;
        studenti[student_at_index].laurea = "triennale";
        studenti[student_at_index].indirizzo.via = "Roma";
        studenti[student_at_index].indirizzo.numero = 20;
        studenti[student_at_index].indirizzo.cap = 20215;
        studenti[student_at_index].indirizzo.citta = "Milano";
    
    }
    
    void print_student(int student_at_index) {
         
        printf("Nome: %s\nCognome: %s\nMatricola: %d\nLaurea: %s\nVia: %s\nNumero: %d\nCap: %d\nCitta: %s\n", 
                      studenti[student_at_index].nome, studenti[student_at_index].cognome, studenti[student_at_index].matricola, 
                      studenti[student_at_index].laurea,
                      studenti[student_at_index].indirizzo.via, studenti[student_at_index].indirizzo.numero, 
                      studenti[student_at_index].indirizzo.cap, studenti[student_at_index].indirizzo.citta);
         
    }
    Studente.h
    codice:
    #include <stdio.h>
    #include "Indirizzo.h"
    
    struct studente {
           char *nome;
           char *cognome;
           int matricola;
           char *laurea;
           struct indirizzo indirizzo;
    } studente;
    Indirizzo.h
    codice:
    #include <stdio.h>
    
    struct indirizzo {
           char *via;
           int numero;
           int cap;
           char *citta;
    } indirizzo;
    Quello che ho postato sopra funziona però vorrei prendere i dati dalla tastiera.

    codice:
    void fill_student(int student_at_index) {
    
         char tmp;
    
         printf("Inserisci studente\n");
         printf("Nome? ");             
         scanf("%s", &tmp);
         
        strcpy(studenti[student_at_index].nome, tmp); 
        studenti[student_at_index].cognome = "Caio";
        studenti[student_at_index].matricola = student_at_index;
        studenti[student_at_index].laurea = "triennale";
        studenti[student_at_index].indirizzo.via = "Roma";
        studenti[student_at_index].indirizzo.numero = 20;
        studenti[student_at_index].indirizzo.cap = 20215;
        studenti[student_at_index].indirizzo.citta = "Milano";
    
    }
    Con gli interi funziona ma con le stringhe mi hanno detto di usare la funzione strcpy che prende come input due puntatori. Ora che scrivo mi sono reso conto che non ho incluso la libreria string.h ma non cambia niente.

  2. #2

    Re: [C] Funzione strcpy...

    Originariamente inviato da Rudie
    Quello che ho postato sopra funziona però vorrei prendere i dati dalla tastiera.

    codice:
    void fill_student(int student_at_index) {
    
         char tmp;
    
         printf("Inserisci studente\n");
         printf("Nome? ");             
         scanf("%s", &tmp);
         
        strcpy(studenti[student_at_index].nome, tmp); 
        studenti[student_at_index].cognome = "Caio";
        studenti[student_at_index].matricola = student_at_index;
        studenti[student_at_index].laurea = "triennale";
        studenti[student_at_index].indirizzo.via = "Roma";
        studenti[student_at_index].indirizzo.numero = 20;
        studenti[student_at_index].indirizzo.cap = 20215;
        studenti[student_at_index].indirizzo.citta = "Milano";
    
    }
    Con quel codice leggi un solo carattere (o meglio, puoi leggere solo un carattere).
    Devi allocare un'array piu' grande (che deve comprendere il carattere terminatore), e devi allocarlo dinamicamente (con malloc e free) perchè altrimenti al ritorno da quella funzione l'array viene deallocato. E poi comunque attento perchè scanf considera come carattere di fine inserimento anche lo spazio, quindi dovresti fare una chiamata per inserire il nome ed una per il cognome.
    lolide
    Java Programmer

    Informati

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    95

    Re: Re: [C] Funzione strcpy...

    Con quel codice leggi un solo carattere (o meglio, puoi leggere solo un carattere).
    Devi allocare un'array piu' grande (che deve comprendere il carattere terminatore), e devi allocarlo dinamicamente (con malloc e free) perchè altrimenti al ritorno da quella funzione l'array viene deallocato.
    Sopra il main ho fatto una cosa del tipo
    codice:
    struct studente *ptr;
    ptr = malloc(sizeof(struct studente));
    che non penso sia molto pulito... Come posso risolvere e parlare con questo array di strutture nei metodi?

    E poi comunque attento perchè scanf considera come carattere di fine inserimento anche lo spazio, quindi dovresti fare una chiamata per inserire il nome ed una per il cognome.
    Non ho ben capito la seconda parte.

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.