Test sur chaine de caractères

Signaler
Messages postés
5
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
19 janvier 2010
-
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
-
Bonjour à tous,
J'ai un petit problème pour faire mon programme. En effet, je veux faire saisir des données par un utilisateur, comme son nom et son prénom. Je veux qu'il saisisse son nom en majuscule et son prénom en minuscule.
Je dois donc faire une vérification sur la chaine qu'il vient de saisir. S'il y a autre chose que des majuscules pour son nom par exemple, je dois renvoyer un message d'erreur.
Je comptais utiliser les fonctions isupper et islower mais, étant donné qu'elles sont valables uniquement pour un caractère, je vous demande votre aide pour faire faire ce petit programme. Ca fait 2 jours que je cherche et je ne trouve pas. Pourriez vous m'en donnez un qui marche svp.

9 réponses

Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
Pour vérifier qu'une chaîne est en minuscule, tu fais une boucle et tu testes chacun des caractères de ta chaîne avec la fonction islower. Si l'un des caractères n'est pas minuscule, alors la chaîne n'est pas minuscule.

Tu fais de même pour savoir si une chaîne est en majuscule.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
5
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
19 janvier 2010

Ok, j'ai déjà essayer, j'ai fais ceci:
main()
{
int n, test1, i;
char chaine[50], test[50], c;


printf("entrez votre nom\n");
scanf("%s", &chaine);
n = strlen(chaine);
for (i=0, i=n; i++;)
{
c=chaine[i];
if(isupper(c))
{
printf("Majuscule");
}
}
system("PAUSE");
return EXIT_SUCCESS;

Le problème est que cela me renvoie une boucle infinie. Je n'arrive pas à trouver ce qui cloche.
Pourriez vous m'aider SVP.
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
Ca devrait aller mieux, comme ceci (attention je n'ai pas testé):

int main()
{
  int n, test1, i;
  char chaine[50], test[50], c;

  printf("Entrez votre nom\n");
  scanf("%s", chaine);
  n = strlen(chaine);
  for (i=0; i < n; ++i)
  {
    c = chaine[i];
    if (isupper(c))
    {
      printf("Majuscule");
    }
  }
  return 0;
}


Pense à en faire une fonction, à réviser les bases, et à apprendre convenablement la syntaxe du C (tu as juste fait des erreurs de syntaxe, pas de raisonnement).

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
5
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
19 janvier 2010

Merci pour ta réponse, mais ça ne fonctionne toujours pas. Cette fois-ci, le programme ne rentre pas dans la boucle. Aurais-tu une solution? Comment aurais tu fais pour réaliser mon programme?
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
Ca fonctionne chez moi. As-tu rentré une chaine en majuscule au moins ?

Comment aurais tu fais pour réaliser mon programme?

J'aurais fait une fonction qui prend en argument une chaine et retourne si celle-ci est entièrement en majuscule ou non. En utilisant une boucle, comme je l'ai fait.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
5
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
19 janvier 2010

Oui, j'ai fais le test. J'utilise Dev, lorsque je rentre n'importe quoi, il ne se passe rien. Je n'y comprends rien, alors que pourtant le programme à l'air bon!
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
Essaie avec ceci, dans ce cas:

#include <stdio.h>

int main(void)
{
  int n, test1, i;
  char chaine[50], test[50], c;

  printf("Entrez votre nom\n");
  scanf("%s", chaine);
  n = strlen(chaine);
  for (i = 0; i < n; ++i)
  {
    c = chaine[i];
    if (isupper(c))
      printf("Majuscule\n");
    else
      printf("Minuscule\n");
  }
  return 0;
}

Ca peut être du, au fait que tu ais oublié le \n dans le printf.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Messages postés
5
Date d'inscription
mardi 19 janvier 2010
Statut
Membre
Dernière intervention
19 janvier 2010

Alors, lorsque je remplace mon i<n par i<=n, le programme affiche minuscule plusieurs fois et s'arrête lorsque je tape des minuscules.
C'est déjà mieux!
Autre question, si je veux faire revenir l'utilisateur au début s'il n'a pas tapé en Majuscule, comment utiliser le While?
Merci
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
i<n par i<=n

Non, surtout pas. Sinon tu vas être en dehors de borne de ton tableau. Un tableau de N élémentz, va de 0 à N - 1.
Donc c'est bien tant que "i < n" ou "i <= n - 1"

Autre question, si je veux faire revenir l'utilisateur au début s'il n'a pas tapé en Majuscule, comment utiliser le While?

Commence par faire une fonction qui détermine si une phrase est en majuscule ou non. Ensuite, il suffira d'y ajouter un while autour.

_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]