Chaine de caractère case vide
Naji_El_khomssi
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, s'il vous plait pouvez vous me corriger ce programme ?
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char T[100];
printf ("Saisissez votre chaine de caracteres: \n");
scanf ("%s",&T);
printf ("Le nombre de caracteres dand votre chaine est: %d",taille(T));
}
taille(int T[100]){
int t=0;
int i;
for (i=0;i<100;i+=1)
if (T[i] != 0)
t=t+1;
return t;}
et merci d'avance
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char T[100];
printf ("Saisissez votre chaine de caracteres: \n");
scanf ("%s",&T);
printf ("Le nombre de caracteres dand votre chaine est: %d",taille(T));
}
taille(int T[100]){
int t=0;
int i;
for (i=0;i<100;i+=1)
if (T[i] != 0)
t=t+1;
return t;}
et merci d'avance
A voir également:
- Caractere vide
- Espace insécable Word : comment insérer des espaces incassables - Guide
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Supprimer page word vide - Guide
2 réponses
'lut, premièrement l'indentation est absente, il est très recommandé d'en mettre si tu comptes lire plus facilement ton programme.
Ensuite:
Il manque un
Il manque un spécificateur de type de retour, et bien qu'implicitement assumé comme étant un
Ajoute un
from human import idiocy
del idiocy
Ensuite:
scanf ("%s",&T);T étant un tableau, c'est déjà un pointeur vers la zone mémoire voulue, donc pas de
&a mettre devant.
taille(T)tu appelles taille() avant l'avoir déclaré ou défini; déplace toute la fonction au dessus du
main().
Il manque un
return 0;a la fin du
main().
taille(int T[100])
Il manque un spécificateur de type de retour, et bien qu'implicitement assumé comme étant un
int(ce que tu veux ici), il faut le préciser.
int T[100], qui créé un nouveau tableau inutilement, est a remplacer par un pointeur du bon type (i.e. le même que
Tde
main()):
char *T.
for (i=0;i<100;i+=1) if (T[i] != 0) t=t+1;Ta boucle ne s'arrête pas quand elle rencontre un
'\0', elle ne compte juste pas le caractère. Or rien ne garantis que T est remplie de 0 au départ, donc des caractères après peuvent être comptés par erreur.
Ajoute un
elseet un
breakpour casser la boucle si le caractère est 0:
for (i=0;i<100;i+=1) if (T[i] != 0) t=t+1; else break;
from human import idiocy
del idiocy
2 remarques en plus de ce que gravgun a dit :
1/ N'oublie pas de mettre un '\n' à la fin de ton dernier printf().
2/ Plutôt que faire un for / if / else /break qui n'est pas super clean, je te conseille un :
Cdlt,
1/ N'oublie pas de mettre un '\n' à la fin de ton dernier printf().
2/ Plutôt que faire un for / if / else /break qui n'est pas super clean, je te conseille un :
i=0; while (T[i] != '\0') { i++; } return i;
Cdlt,
Oui, j'avais compris. Mon propos était d'attirer l'attention sur le fait que l'on peut exploiter ce que sait faire l'instruction
Je te rejoins sur le fait que
Dal
fordans les parenthèses, au point de pouvoir se passer d'accolades dans ce cas particulier. Ainsi, au final, l'algorithme que proposait de mettre gravgun dans les accolades peut se trouver seulement dans les parenthèses.
Je te rejoins sur le fait que
whileme vient aussi plus naturellement dans ces cas, et il a sans doutes une meilleure lisibilité.
Dal
, qui créé un nouveau tableau inutilement,
Non, ça ne créé rien du tout puisque c'est en argument. Que tu mettes ici int T[100], int T[] ou int *T ne changera rien...