[langageC]

ABDOU1919 Messages postés 9 Statut Membre -  
mamiemando Messages postés 34243 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');
}

2 réponses

ctiti60 Messages postés 1022 Statut Membre 70
 
Salut,

Essayes avec un AND (&&) au lieu du OR (||)
0
mamiemando Messages postés 34243 Date d'inscription   Statut Modérateur Dernière intervention   7 898
 
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