Exerciice de langage C
aziz1015
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, voici le problème auquel je suis confronté, j'ai besoin de votre aide. Merci d'avance
Ecrire un programme en c qui lit 10 phrases d'une longueur de 200 caractères au clavier et qui les memorise dans un tableau de pointeurs sur char en réservant dynamiquement l'emplacement en mémoire pour les chaines.Ensuite,lordre des phrases est inversé en modifiant les pointeurs et le tableau résultant est affiché
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j;
char *P;
char CH[200];
char *Tab[10];
puts("Introduire dix phrases au clavier :");
for(i=0; i<10; i++)
{
printf("Donner la phrase %d du tableau (max.200):", i);
gets(CH);
Tab = (char*)malloc(500*sizeof(CH));
}
printf("Affichage du tableau:\n");
for(i=0;i<10;i++)
{
puts(Tab[i]);
}
for (i=0; j=9; i<j; i+++, j--)
{
P=Tab[i];
Tab[i]=Tab[j];
Tab[j]=P;
}
printf("Donner le tableau resultant:\n");
for(i=0; i<10; i++)
{
puts (Tab[i]);
}
system("pause");
return 0;
}
Ecrire un programme en c qui lit 10 phrases d'une longueur de 200 caractères au clavier et qui les memorise dans un tableau de pointeurs sur char en réservant dynamiquement l'emplacement en mémoire pour les chaines.Ensuite,lordre des phrases est inversé en modifiant les pointeurs et le tableau résultant est affiché
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j;
char *P;
char CH[200];
char *Tab[10];
puts("Introduire dix phrases au clavier :");
for(i=0; i<10; i++)
{
printf("Donner la phrase %d du tableau (max.200):", i);
gets(CH);
Tab = (char*)malloc(500*sizeof(CH));
}
printf("Affichage du tableau:\n");
for(i=0;i<10;i++)
{
puts(Tab[i]);
}
for (i=0; j=9; i<j; i+++, j--)
{
P=Tab[i];
Tab[i]=Tab[j];
Tab[j]=P;
}
printf("Donner le tableau resultant:\n");
for(i=0; i<10; i++)
{
puts (Tab[i]);
}
system("pause");
return 0;
}
A voir également:
- Exerciice de langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage visual basic - Télécharger - Langages
- Langage basic gratuit - Télécharger - Édition & Programmation
5 réponses
mon problème je crois que c'est au niveau de l'allocation parce que c'est surtout là que ça bugue!!! aidez moi svp
azzul a aziz ;)
l'erreur de ton programme est très simple, il suffit juste de revoir juste un petit peu tes cours d'allocation dynamique de mémoire....
quand tu suhaites faire une allocation dynamique, tu dois créer un pointeur du meme type que les données sur lesquelles il pointera, en bref, toi t'as déclaré Tab comme un mélange de pointeur et de tableau (c'est la première fois que je voix cette écriture, d'ailleurs je ne sia smm pas ça existe ou pas, en tous les cas pas dans les alloc mem), donc pour corriger cette erreur, il suffit de déclarer on Tab comme un simple pointeur
char* Tap; //pointeur sur caractères....
il ne faut surtout pas oublier de mettre le caractère de fin de chaine '\0' une fois ton buffer rempli (Tab)
par contre les primitives puts(), system() je les ai jamais utilisé.....don je ne peux pas t'en dire plus
bon courage a gma ;)
l'erreur de ton programme est très simple, il suffit juste de revoir juste un petit peu tes cours d'allocation dynamique de mémoire....
quand tu suhaites faire une allocation dynamique, tu dois créer un pointeur du meme type que les données sur lesquelles il pointera, en bref, toi t'as déclaré Tab comme un mélange de pointeur et de tableau (c'est la première fois que je voix cette écriture, d'ailleurs je ne sia smm pas ça existe ou pas, en tous les cas pas dans les alloc mem), donc pour corriger cette erreur, il suffit de déclarer on Tab comme un simple pointeur
char* Tap; //pointeur sur caractères....
il ne faut surtout pas oublier de mettre le caractère de fin de chaine '\0' une fois ton buffer rempli (Tab)
par contre les primitives puts(), system() je les ai jamais utilisé.....don je ne peux pas t'en dire plus
bon courage a gma ;)
Bonjour,
gets(CH);
Il ne faut pas utiliser cette fonction. Il vaut mieux utiliser fgets qui permet de limiter la saisie : fgets(CH, sizeof CH, stdin);
Tab = (char*)malloc(500*sizeof(CH));
Cela revient à faire : Tab=malloc(1000); puisque sizeof(CH) = 200.
En revanche, il serait intéressant de faire : malloc(strlen(CH) + 1);
Cela réservera la bonne longueur, ni plus, ni moins (contrairement à sizeof).
Ensuite, il faut stocker le malloc dans Tab[i] et non dans Tab. Puisqu'il y a incompatibilité dans les types. Et enfin, le cast est implicite, donc pas besoin de le mettre.
Ce qui donne : Tab[i]=malloc(strlen(CH) + 1);
Il ne faut pas non plus oublier de stocker CH dans Tab[i], pour cela tu peux utiliser strcpy (ou strncpy pour la version sécurisée) : strcpy(Tab[i],CH);
for (i=0; j=9; i<j; i+++, j--)
Plutôt i++ non ?
Le reste est très bien. Après, dans le style de codage :
int main (void), c'est mieux.
Faire des fonctions, cela rendra le code plus lisible.
Restreindre la portée des variables.
Contrôler le retour des malloc, et fgets.
Rendre le code portable en évitant system("pause");
Commenter le code.
Cdlt,
Google is your friend
gets(CH);
Il ne faut pas utiliser cette fonction. Il vaut mieux utiliser fgets qui permet de limiter la saisie : fgets(CH, sizeof CH, stdin);
Tab = (char*)malloc(500*sizeof(CH));
Cela revient à faire : Tab=malloc(1000); puisque sizeof(CH) = 200.
En revanche, il serait intéressant de faire : malloc(strlen(CH) + 1);
Cela réservera la bonne longueur, ni plus, ni moins (contrairement à sizeof).
Ensuite, il faut stocker le malloc dans Tab[i] et non dans Tab. Puisqu'il y a incompatibilité dans les types. Et enfin, le cast est implicite, donc pas besoin de le mettre.
Ce qui donne : Tab[i]=malloc(strlen(CH) + 1);
Il ne faut pas non plus oublier de stocker CH dans Tab[i], pour cela tu peux utiliser strcpy (ou strncpy pour la version sécurisée) : strcpy(Tab[i],CH);
for (i=0; j=9; i<j; i+++, j--)
Plutôt i++ non ?
Le reste est très bien. Après, dans le style de codage :
int main (void), c'est mieux.
Faire des fonctions, cela rendra le code plus lisible.
Restreindre la portée des variables.
Contrôler le retour des malloc, et fgets.
Rendre le code portable en évitant system("pause");
Commenter le code.
Cdlt,
Google is your friend
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question