Débutant en C

Résolu/Fermé
AlKiir Messages postés 42 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 14 mai 2011 - 24 juil. 2009 à 18:13
AlKiir Messages postés 42 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 14 mai 2011 - 26 juil. 2009 à 21:09
Bonjour,
J'essaie de coder un petit programme en C:
On tape un texte (a la console pour le moment)
Certaines lettres du textes sont changées (ici le a, b, c et d)


code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
char *text;
int pos=0;

scanf("%s", text);

do
{
if (text[pos]="a")
{
text[pos]="+";
}
if (text[pos]="b")
{
text[pos]="-";
}
if (text[pos]="c")
{
text[pos]="×";
}
if (text[pos]="d")
{
text[pos]="÷";
}
pos++;
}
while(pos <20);



printf("%d", text);




return 0;
}

Donc je ne voie pas du tout ou ca ne marche pas
Un conseil?
Merci

6 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
25 juil. 2009 à 00:48
Salut,
Plusieurs erreurs dans ton code :
char *text; scanf("%s", text);
Aucune allocation de faite, donc ça peut envoyer un joli segfault. Tu peux passer par un tableau plutôt que d'utiliser une allocation dynamique. Par exemple :
char text[20]; scanf("%19s",text);


if (text[pos]="a")
Plusieurs erreurs dans cette ligne. Tu souhaites comparer un char avec une chaîne de caractères, ce qui n'est pas possible. Si tu veux tester text[pos] avec le caractère 'a', tu dois utiliser les apostrophes, et utiliser l'opérateur de comparaison (double égal). L'opérateur simple égal sert pour l'affectation.
Ce qui donnerait : if(text[pos]=='a')

text[pos]="+";
Ici tu souhaites réaliser une affectation, donc il s'agit effectivement du simple opérateur égal. Mais tu souhaites affecter un caractère et non une chaîne. Il faut donc utiliser l'integer '+' (entre apostrophe).
Soit : text[pos]='+';

De même pour l'ensemble des if et de leurs blocs.

printf("%d", text);
Et enfin pour afficher, une chaîne, il faut utiliser %s et non %d.
Correction : printf("%s", text);


Sinon d'une manière générale sur ton code, tu pourrais utiliser un switch pour la clarté. ;-))).

Cdlt
1
char * text est un pointeur et il n'y a pas d'allocation de mémoire !
il suffit de declarer un tableau char text[21] ;
0
AlKiir Messages postés 42 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 14 mai 2011
24 juil. 2009 à 19:26
Merci, ca ne plante déjà plus, mais je n'obtiens toujours pas le résultat prévus lol
maintenant j'ai un résultat qu'avec des +++++
Merci pour votre temps
0
bonjour,
c'est normal que tu ai des +++, une string s'imprime avec %s et pas %d
remplace par printf("%s", text); et ça devrait aller mieux !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
i.amghari5 Messages postés 27 Date d'inscription vendredi 24 juillet 2009 Statut Membre Dernière intervention 25 juillet 2009 2
25 juil. 2009 à 16:34
tu doit mettre à la fin du programme getch(); avant return0;
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
25 juil. 2009 à 16:45
Vaut mieux mettre getchar() car getch() n'est pas portable.
D'ailleurs, il faudrait mettre deux getchar() à cause du '\n' stocké dans le buffer à cause du scanf.
0
AlKiir Messages postés 42 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 14 mai 2011
26 juil. 2009 à 21:09
Merci beaucoup! ca marche super maintenan
0