Problème avec un programme C
Résolu
yadhus
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
-
yadhus Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
yadhus Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un exercice de programmation C qui ne veut pas fonctionner, je vous donne ci-dessous le code source que j'ai utilisé:
Exercice 5
Lire caractère par caractère une ligne entrée au clavier (la fin de ligne est caractérisée par un retour chariot) et la stocker dans un tableau.
Transformer cette ligne en remplaçant une suite d'espaces ou une tabulation par un espace unique, et en remplaçant le retour chariot de fin de ligne par le caractère nul ('\0').
Réécrire la ligne ainsi transformée par un printf () de chaîne de caractères.
#include <stdio.h>
#include <string.h>
int main ()
{
char ch[255];
int i,j,A;
printf ("Donner votre chaîne de caractère\n");
gets (ch);
A=strlen(ch);
for (i=1;i<A;i++)
{
if ((ch[i]=' ') && (ch[i+1]=' '))
{
for (j=i+1;j<A;j++) ch[j]=ch[j+1];
}
A--;
}
for (i=0;i<A;i++)
{
if (ch[i]='\t')
{
for (j=i;j<A;j++)
ch[j]=ch[j+1];
}
A--;
}
puts (ch);
return 0;
}
J'ai un exercice de programmation C qui ne veut pas fonctionner, je vous donne ci-dessous le code source que j'ai utilisé:
Exercice 5
Lire caractère par caractère une ligne entrée au clavier (la fin de ligne est caractérisée par un retour chariot) et la stocker dans un tableau.
Transformer cette ligne en remplaçant une suite d'espaces ou une tabulation par un espace unique, et en remplaçant le retour chariot de fin de ligne par le caractère nul ('\0').
Réécrire la ligne ainsi transformée par un printf () de chaîne de caractères.
#include <stdio.h>
#include <string.h>
int main ()
{
char ch[255];
int i,j,A;
printf ("Donner votre chaîne de caractère\n");
gets (ch);
A=strlen(ch);
for (i=1;i<A;i++)
{
if ((ch[i]=' ') && (ch[i+1]=' '))
{
for (j=i+1;j<A;j++) ch[j]=ch[j+1];
}
A--;
}
for (i=0;i<A;i++)
{
if (ch[i]='\t')
{
for (j=i;j<A;j++)
ch[j]=ch[j+1];
}
A--;
}
puts (ch);
return 0;
}
A voir également:
- Problème avec un programme C
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Forcer la fermeture d'un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Desinstaller un programme - Guide
4 réponses
Bonjour,
Je vois deux points par lesquels commencer:
1) gets ne répond pas exactement à l'énoncé (enfin moi je ne l'interpréterais pas comme ça) car gets lit la ligne puis tu transformes. Je ferais un getc pour lire caractère par caractère. Ainsi tu peux vérifier en live si tu as des doubles espaces et ne pas les insérer dans une chaîne que tu construit petit à petit.
2) if ( (ch[i]=' ' ) && ( ch[i+1]=' ' ) )
si ch "Bonjour", après cette ligne ch vaudra " njour"
Le test d'égalité en C/C++/Java est ==, un simple = est une affectation.
M.
EDIT.
Je n'ai pas vérifié ce point car il m'a apparu possible dans ton algo. Un tableau de 7 caractères va bien de l'indice 0 à 6.
Je vois deux points par lesquels commencer:
1) gets ne répond pas exactement à l'énoncé (enfin moi je ne l'interpréterais pas comme ça) car gets lit la ligne puis tu transformes. Je ferais un getc pour lire caractère par caractère. Ainsi tu peux vérifier en live si tu as des doubles espaces et ne pas les insérer dans une chaîne que tu construit petit à petit.
2) if ( (ch[i]=' ' ) && ( ch[i+1]=' ' ) )
si ch "Bonjour", après cette ligne ch vaudra " njour"
Le test d'égalité en C/C++/Java est ==, un simple = est une affectation.
M.
EDIT.
Je n'ai pas vérifié ce point car il m'a apparu possible dans ton algo. Un tableau de 7 caractères va bien de l'indice 0 à 6.
Merci beaucoup pour ton aide. J'ai enfin résolu cet exercice, bon si jamais ça t'intéresses voici le code source
#include <stdio.h>
#include <string.h>
int main ()
{
char ch[255];
int i,j,A,e;
printf ("Donner votre chaîne de caractère\n");
gets (ch);
A=strlen(ch);
for (i=0;i<A;i++)
{
if (e!=0) i--;
e=0;
if (ch[i]=='\t')
{
/*for (j=i;j<A;j++)
{
ch[j]=ch[j+1];
e++;
A--;
}*/
ch[i]=' ';
}
}
e=0;
for (i=0;i<A;i++)
{
if (e!=0) i--;
e=0;
if ((ch[i]==' ') && (ch[i+1]==' '))
{
for (j=i+1;j<A;j++) ch[j]=ch[j+1];
e++;
A--;
}
}
puts (ch);
return 0;
}
#include <stdio.h>
#include <string.h>
int main ()
{
char ch[255];
int i,j,A,e;
printf ("Donner votre chaîne de caractère\n");
gets (ch);
A=strlen(ch);
for (i=0;i<A;i++)
{
if (e!=0) i--;
e=0;
if (ch[i]=='\t')
{
/*for (j=i;j<A;j++)
{
ch[j]=ch[j+1];
e++;
A--;
}*/
ch[i]=' ';
}
}
e=0;
for (i=0;i<A;i++)
{
if (e!=0) i--;
e=0;
if ((ch[i]==' ') && (ch[i+1]==' '))
{
for (j=i+1;j<A;j++) ch[j]=ch[j+1];
e++;
A--;
}
}
puts (ch);
return 0;
}
encore une possibilité
#include<stdio.h> int lire(char *ch,int longueur); int main () { char ch[255]; while(lire(ch,255)>0){ printf("%s\n",ch); } return 0; } int lire(char *ch,int longueur){ int i,c; char d = 'a'; for(i=0;i<longueur-1 && (c=getchar()) != EOF && c != '\n';){ if(c == '\t') c = ' '; if(d!=' ') ch[i++] = c; if(d==' ' && c!=' ') ch[i++] = c; d=c; } ch[i]='\0'; return i; }