[langageC]
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');
}
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
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 :
Ce qui donne (ici sous linux) :
Pour plus de details sur getline :
http://man.developpez.com/man3/getline.3.php
Bonne chance
- é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