Débutant en C

Résolu
AlKiir Messages postés 43 Statut Membre -  
AlKiir Messages postés 43 Statut Membre -
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
Configuration: Windows XP
Firefox 3.5.1

6 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  2. jose23
     
    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
  3. AlKiir Messages postés 43 Statut Membre
     
    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
  4. java4ever
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. i.amghari5 Messages postés 30 Statut Membre 2
     
    tu doit mettre à la fin du programme getch(); avant return0;
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
  7. AlKiir Messages postés 43 Statut Membre
     
    Merci beaucoup! ca marche super maintenan
    0