[langageC]

ABDOU1919 Messages postés 9 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
slt je vais ecrire un texte en meme temps chaque caractere ecrit je veux le stocké dans un tableau jusqu'a i<20 ou quand je click sur enter.
le code est en dessous mais le probleme que la condition de sorti de la boucle n'est pas valide il ecrit a l'infinie

#include<stdio.h>
#include<string.h>

int i=0;
char t[10];
main()
{
printf("Veuillez entrer votre message:\n\t");

do{
scanf("%c",&t[i]);
i++;}
while(i<10 || t[i]!='\0');
}
Configuration: Windows XP
Firefox 1.5.0.12

2 réponses

  1. ctiti60 Messages postés 1022 Statut Membre 70
     
    Salut,

    Essayes avec un AND (&&) au lieu du OR (||)
    0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Oula alors pour commencer c'est bien && et || qu'il faut utiliser. Ensuite il faut
    - éviter les variables gloables (ici i et t).
    - mettre un type de retour à main : tu es sensé retourner un int (0 quand tout va bien, un code d'erreur sinon).

    Le problème c'est que scanf commence à lire uniquement quand tu appuies sur entrée. Il faut donc contrôler la longeur du message une fois qu'il est saisi.

    Exemple :
    #define _GNU_SOURCE
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main(){
        const unsigned N = 20;
        unsigned n = N;
        char *t = (char *)calloc(N,sizeof(char));
        getline(&t,&n,stdin);
        if(n > N){
            printf("message trop long\n");
        }else{
            printf("%s\n",t);
        }
        free(t);
        return 0;
    }
    

    Ce qui donne (ici sous linux) :
    (mando@aldur) (~) $ ./a.out
    j'aime les tapirs
    j'aime les tapirs
    
    (mando@aldur) (~) $ ./a.out
    123456789012345678901234567890
    message trop long
    

    Pour plus de details sur getline :
    http://man.developpez.com/man3/getline.3.php

    Bonne chance
    0