Saisie d'une chaine de caracteres en C
netik
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Hxyp Messages postés 401 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis vraiment bloqué sur un problème concernant la saisie des chaines de caracteres. Mon programme est censé insérer le mot saisi dans un fichier mots.txt en le positionnant à la bonne place par tri dans l'ordre alphabétique.
Alors voilà, j'ai fait ceci, mais avec des scanf, et cela ne le permet pas de saisir des mots composés :(.
int saisieNouveauMot(char tabMots[][30], int tailleLogique)
{
int i=0, j, res;
char mot2[31];
printf("Tapez le mot a inserer : ");
scanf("%s",mot2);
printf("\n");
while (i<tailleLogique)
{
res = strcmp(mot2,tabMots[i]);
if (res < 0)
{
for (j=tailleLogique+1 ; j>i ; j--)
{
strcpy(tabMots[j],tabMots[j-1]);
}
strcpy(tabMots[i],mot2);
return tailleLogique+1;
}
else if (res == 0)
{
printf("Le mot %s est deja insere\n",mot2);
return tailleLogique;
}
i++;
}
// i = tailleLogique
res = strcmp(mot2, tabMots[i]);
if (res > 0)
{
strcpy(tabMots[i],mot2);
return tailleLogique+1;
}
}
Je suis vraiment bloqué sur un problème concernant la saisie des chaines de caracteres. Mon programme est censé insérer le mot saisi dans un fichier mots.txt en le positionnant à la bonne place par tri dans l'ordre alphabétique.
Alors voilà, j'ai fait ceci, mais avec des scanf, et cela ne le permet pas de saisir des mots composés :(.
int saisieNouveauMot(char tabMots[][30], int tailleLogique)
{
int i=0, j, res;
char mot2[31];
printf("Tapez le mot a inserer : ");
scanf("%s",mot2);
printf("\n");
while (i<tailleLogique)
{
res = strcmp(mot2,tabMots[i]);
if (res < 0)
{
for (j=tailleLogique+1 ; j>i ; j--)
{
strcpy(tabMots[j],tabMots[j-1]);
}
strcpy(tabMots[i],mot2);
return tailleLogique+1;
}
else if (res == 0)
{
printf("Le mot %s est deja insere\n",mot2);
return tailleLogique;
}
i++;
}
// i = tailleLogique
res = strcmp(mot2, tabMots[i]);
if (res > 0)
{
strcpy(tabMots[i],mot2);
return tailleLogique+1;
}
}
A voir également:
- Saisie d'une chaine de caracteres en C
- Saisie gestuelle iphone - Guide
- Caractères ascii - Guide
- Caractères spéciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Comment saisir une adresse url - Guide
1 réponse
Bonjour, pouvez faire la fonction vous même en utilisant getchar() ou scanf, fread..
ou utiliser fgets :
char s[12];
fgets(s,12,stdin);
printf("%s\n",s);
http://www.cplusplus.com/reference/cstdio/fgets/
fgets prend en compte le caractère NULL '\0' qu'il ajoute à la fin de la chaine dans le paramètre int num,
exemple "hello world" fait 11 char mais il faut utiliser un tableau de 12 char pour ne pas avoir de dépassement (segfault) en utilisant fgets. c'est juste un détail..
ou utiliser fgets :
char s[12];
fgets(s,12,stdin);
printf("%s\n",s);
http://www.cplusplus.com/reference/cstdio/fgets/
fgets prend en compte le caractère NULL '\0' qu'il ajoute à la fin de la chaine dans le paramètre int num,
exemple "hello world" fait 11 char mais il faut utiliser un tableau de 12 char pour ne pas avoir de dépassement (segfault) en utilisant fgets. c'est juste un détail..