Tableau de caractère [Résolu]

Signaler
Messages postés
13
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
31 décembre 2007
-
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
-
salut à tous
voila j'ai un petit problème: je veux crée un tableau de caractère avec une boucle for et l'afficher caractère par caractère:
#include <conio.h>
#include <stdio.h>
#define L 255
void saisie(char x[L])
{
  int i;
    for(i=0;x[i]!='\0';i++)
    scanf("%c",&x[i]);
    x[i]='\0';
}
void affiche(char x[L])
{
  int i;
  for(i=0;x[i]!='\0';i++)
    printf("%c\n",x[i]);
}
void main()
{
  //clrscr();
  char ch[L];
  saisie(ch);
  affiche(ch);
  getch();
}
ou est la faute?!
merci d'avance

9 réponses

Messages postés
173
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
10 mai 2010

ton scanf dans la boucle saisie chope 2 char à la fois et la condition de sortie de ta boucle n'est pas bonne.


essaie ça

void saisie(char x[L])

{

  int i;

    for(i=0;x[i-1]!='\n';i++)

    {

        scanf("%c",&x[i]);

        flushall();

    }


    x[i]='\0';

}


si tu tapes enter, tu sors de la boucle.

.
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut :

La faute est claire et évidente :

la condition dans la boucle est mal fausse
 
for(i=0; ch[i] != '\0'; i++)

Dans l'appel tu fais :

char ch [L];
saisie (ch);

Initialement le contenu de ch est aléatoire. Est tu sur que tu vas rencontrer un '\0'

une proposition :

void saisie (char * str, int l) {
    for (int i=0; i<l; ++i) {
       printf ("char : ");scanf ("%c", str+i);
    }
    str [i] = '\0';
}

void afficher (char * str) {
    printf ("%s", str);
}

// main

char txt [L];

saisie (L, 20);
afficher (L);
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut :

ajoutes donc un fflush (stdin)

ou tout simplement

void saisie (char * str)
{
    gets (str);
}
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
salut :

void saisie (char * str, int l) {
    for (int i=0; i<l; ++i) {
       printf ("char : ");
       scanf ("%c", str+i);
       fflush (stdin);
    }
    str [i] = '\0';
}
Messages postés
173
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
10 mai 2010

C'est une cas d'école quoi...
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut :

Mais ça revient au même. Pourquoi compliquer les choses tant qu'il y a des solutions plus simples à moins que tu cherches autre chose à faire que je ne peux pas dissimuler à travers ce petit bout de code?

Que veux tu faire précisement?
Messages postés
173
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
10 mai 2010

heu...

ce n'est pas moi qui ait posé la question à la base. Moi j'ai proposé une solution... regarde + haut...
Messages postés
13
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
31 décembre 2007

ah oui oui je vois j'ai confondu le \n avec le \0 de la fin de la chaine merci titi035 merci aussi ombitious developper mais je cherche une solution sans les *pointeur
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut :

Il faut que tu prend l'habitude d'utiliser les char *
C'est le coeur du C.

Score :

[auteurdetail.aspx?ID=667082 Titi035]
1 - 0 [auteurdetail.aspx?ID=237842 Ombitious_Developper]