Aller directement au contenu
  • Catégories
  • Récent
  • Mots-clés
  • Populaire
  • Web
  • Utilisateurs
  • Groupes
Habillages
  • Clair
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Sombre
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Défaut (Aucun habillage)
  • Aucun habillage
Réduire
Melinyel

Melinyel

  1. Accueil
  2. Programmation
  3. Développement de logiciels
  4. C
  5. Exercices
  6. Exercice sur les structures.

Exercice sur les structures.

Planifié Épinglé Verrouillé Déplacé Exercices
6 Messages 4 Publieurs 2.5k Vues
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • AlemortA Hors-ligne
    AlemortA Hors-ligne
    Alemort
    a écrit sur dernière édition par
    #1

    Exercice 1

    Réaliser un algorithme qui permet d'afficher une structure qui contient l'âge, le nom, le prénom, et la ville.

    ![50hl.png](<base_url>/applications/sslimageproxy/interface/image.php?url=http://zupimages.net/up/14/15/50hl.png)

    Exercice 2: Il sera un peu plus poussé

    Nous allons améliorer le précédent programme.

    Eux lieu de donner des valeurs prédéfinie pour le prénom, nom age, ville, nous allons laisser l'utilisateur  l'ai saisir 😉

    Une image devrait vous éclaircir la chose 😉

    ![5fh2.png](<base_url>/applications/sslimageproxy/interface/image.php?url=http://zupimages.net/up/14/15/5fh2.png)

    ps: Vous pouvez résoudre cette exercice en passant par un autres chemin, mais le but et de s'exercer au maniement des structures

    Vous pouvez poster vos codes sources et des images, pour que l'on puisse en discuter et peux être apprendre de nouvelles choses  😉

    Mettez tout ça dans une balise spoil 😉

    1 réponse Dernière réponse
    1
    • CyrionC Hors-ligne
      CyrionC Hors-ligne
      Cyrion
      a écrit sur dernière édition par
      #2

      Vite fait en classe >.<

      #include <stdio.h>
      #include <conio.h>
      
      struct Info
      {
      	char Prenom[10];
      	char Nom[15];
      	int Age;
      	char Ville[15];
      };
      
      void DemandeInfo(Info &P)
      {
      	printf("-----Saisi des donnees-----\n\n\n");
      
      	printf("Entrer votre prenom:");
      	scanf("%s",P.Prenom);
      
      	printf("Entrer votre nom:");
      	scanf("%s",P.Nom);
      
      	printf("Entrer votre age:");
      	scanf("%i",&P.Age);
      
      	printf("Entrer votre ville actuelle:");
      	scanf("%s",P.Ville);
      }
      
      void AfficherInfo(Info &P)
      {
      	printf("\n\n\n-----Affichage des donnees-----\n\n\n");
      	printf("Prenom: %s\n",P.Prenom);
      	printf("Nom: %s\n",P.Nom);
      	printf("Age: %i\n",P.Age);
      	printf("Ville: %s\n",P.Ville);
      }
      
      int main()
      {
      	Info Personne;
      
      	DemandeInfo(Personne);
      	AfficherInfo(Personne);
      
      	getch();
      	return 0;
      }
       
      
      1 réponse Dernière réponse
      1
      • AlexMogA Hors-ligne
        AlexMogA Hors-ligne
        AlexMog
        Modérateur spécialisé
        a écrit sur dernière édition par
        #3

        Vite fait en classe >.<

        #include <stdio.h>
        #include <conio.h>
        
        struct Info
        {
        	char Prenom[10];
        	char Nom[15];
        	int Age;
        	char Ville[15];
        };
        
        void DemandeInfo(Info &P)
        {
        	printf("-----Saisi des donnees-----\n\n\n");
        
        	printf("Entrer votre prenom:");
        	scanf("%s",P.Prenom);
        
        	printf("Entrer votre nom:");
        	scanf("%s",P.Nom);
        
        	printf("Entrer votre age:");
        	scanf("%i",&P.Age);
        
        	printf("Entrer votre ville actuelle:");
        	scanf("%s",P.Ville);
        }
        
        void AfficherInfo(Info &P)
        {
        	printf("\n\n\n-----Affichage des donnees-----\n\n\n");
        	printf("Prenom: %s\n",P.Prenom);
        	printf("Nom: %s\n",P.Nom);
        	printf("Age: %i\n",P.Age);
        	printf("Ville: %s\n",P.Ville);
        }
        
        int main()
        {
        	Info Personne;
        
        	DemandeInfo(Personne);
        	AfficherInfo(Personne);
        
        	getch();
        	return 0;
        }
         
        

        Normalement, ça ne devrais pas compiler 😉

        Voici la correction:

        (par contre, c'est pas du tout sécu ton truc, y'a un risque de segfault énorme! ne faites JAMAIS confiance en ce qu'entre vos utilisateurs 😉 )

        #include <stdio.h>
        #include <conio.h>
        
        struct Info
        {
        	char Prenom[10];
        	char Nom[15];
        	int Age;
        	char Ville[15];
        };
        // Le typpage "Info" n'existe pas. Le véritable typpage est "struct Info", puisque tu n'as absolument pas utilisé de typedef . On peut régler le problème en rajoutant un typedef, comme ici:
        // typedef s_ma_structure type_name;
        
        // Ici, tu utilise "struct Info &P", donc tu demande une référence de P, les références existent uniquement en C++ . Il faut donc envoyer un pointeur. Et ne surtout pas oublier de changer les "." par des "->" (car pointeurs)
        void DemandeInfo(struct Info *P)
        {
        	printf("-----Saisi des donnees-----\n\n\n");
        
                // ATTENTION!
        	printf("Entrer votre prenom:");
        	scanf("%s",P->Prenom);
        
        	printf("Entrer votre nom:");
        	scanf("%s",P->Nom);
        
        	printf("Entrer votre age:");
        	scanf("%i",&P->Age);
        
        	printf("Entrer votre ville actuelle:");
        	scanf("%s",P->Ville);
        }
        
        void AfficherInfo(struct Info *P)
        {
        	printf("\n\n\n-----Affichage des donnees-----\n\n\n");
        	printf("Prenom: %s\n",P->Prenom);
        	printf("Nom: %s\n",P->Nom);
        	printf("Age: %i\n",P->Age);
        	printf("Ville: %s\n",P->Ville);
        }
        
        int main()
        {
        	struct Info Personne;
        
                // Ici, tu demande l'adresse de "Personne" et non pas le contenu 
        	DemandeInfo(&Personne);
        	AfficherInfo(&Personne);
        
        	getch();
        	return 0;
        }
        

        Ensuite, la norme UNI de C stipule ne pas utiliser les majuscules, SAUF au niveau des macros 😉 . C'est en C++ qu'on définit des majuscules UNIQUEMENT au début des objets (et non pas des attributs) et au niveau des nom des methodes (for exemple: getGetter())

        Multiplayer GameDev @ Unexpected

        Mon CV

        1 réponse Dernière réponse
        1
        • AlexMogA Hors-ligne
          AlexMogA Hors-ligne
          AlexMog
          Modérateur spécialisé
          a écrit sur dernière édition par
          #4

          Ma petite version:

          #include <unistd.h>
          #include <stdio.h>
          
          typedef struct		s_user
          {
          	char			*name;
          	char			*last_name;
          	unsigned int	*age;
          	char			*city;
          }					t_user;
          
          int	read_data(t_user *user)
          {
          	unsigned int 	readed;
          	char			buffer[100];
          	char			*questions[] = {"Your name?", "Your last name?", "Your age?", "Your city?"};
          	int				types[] = {0, 0, 1, 0};
          	int				i;
          	void			*first_addr;
          	
          	first_addr = &user->name;
          	i = 0;
          	readed = 0;
          	while (i < 4)
          	{
          		printf("%s\n", questions[i]);
          		if ((readed = read(0, buffer, 15)) < 0)
          			return (1);
          		buffer[readed] = 0;
          		printf("%c", '\n');
          		if (!types[i])
          		{
          			if (((char*)(*first_addr) = malloc(strlen(buffer) * sizeof(char))) == NULL)
          				return (1);
          			memcpy((char*)(*fist_addr), buffer, strlen(buffer) * sizeof(char));
          			first_addr += sizeof(void*);
          		}
          		else
          		{
          			(unsigned int)(*first_addr) = atoi(buffer);
          			first_addr += sizeof(int);
          		}
          		++i;
          	}
          	return (0);
          }
          
          // Pointeur constant car non modifié
          void		show_data(const t_user *user)
          {
          	printf("First Name: %s\nName: %s\nAge: %d\nCity: %s\n",
          			user->name, user->last_name, user->age, user->city);
          }
          
          int			main(void)
          {
          	t_user	userdata;
          	
          	if (read_data(userdata))
          	{
          		fprintf(stderr, "Error on reading.");
          		return (1);
          	}
          	// J'envois un pointeur car je ne vais pas copier toute une structure dans la stack... Pouah!
          	show_data(&userdata);
          	return (0);
          }
          

          Multiplayer GameDev @ Unexpected

          Mon CV

          1 réponse Dernière réponse
          1
          • CyrionC Hors-ligne
            CyrionC Hors-ligne
            Cyrion
            a écrit sur dernière édition par
            #5

            Meh, je fais du C++ à l'habitude, je me souvenais pas de toute les petites règles 😛

            par contre, c'est pas du tout sécu ton truc, y'a un risque de segfault énorme! ne faites JAMAIS confiance en ce qu'entre vos utilisateurs

            Personne a demandé à ce qu'il le soit. 🙂

            1 réponse Dernière réponse
            0
            • AzadA Hors-ligne
              AzadA Hors-ligne
              Azad
              a écrit sur dernière édition par
              #6

              Pas d'autres participants ?

              Merci Alemort d'avoir proposé un exercice comme ça, sympa comme idée (et à refaire si possible !). 😉

              Administrateur du forum.

              Contactez-moi par message privé ou par mail.

              1 réponse Dernière réponse
              0

              Bonjour ! Vous semblez intéressé par cette conversation, mais vous n’avez pas encore de compte.

              Marre de refaire défiler les mêmes messages ? Créez un compte pour retrouver votre position, recevoir des notifications des nouvelles réponses, sauvegarder vos favoris et voter pour les messages que vous appréciez.

              Grâce à votre participation, ce message peut devenir encore meilleur 💗

              S'inscrire Se connecter
              Répondre
              • Répondre à l'aide d'un nouveau sujet
              Se connecter pour répondre
              • Du plus ancien au plus récent
              • Du plus récent au plus ancien
              • Les plus votés


              • Se connecter

              • Connectez-vous ou inscrivez-vous pour faire une recherche.
              Powered by NodeBB Contributors
              • Premier message
                Dernier message
              0
              • Catégories
              • Récent
              • Mots-clés
              • Populaire
              • Web
              • Utilisateurs
              • Groupes