Test sur chaine de caractères

valoch33 Messages postés 5 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 19 janvier 2010 - 19 janv. 2010 à 11:52
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 19 janv. 2010 à 14:07
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 janv. 2010 à 12:25
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]
0
valoch33 Messages postés 5 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 19 janvier 2010
19 janv. 2010 à 12:30
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.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 janv. 2010 à 12:33
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]
0
valoch33 Messages postés 5 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 19 janvier 2010
19 janv. 2010 à 12:38
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 janv. 2010 à 12:41
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]
0
valoch33 Messages postés 5 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 19 janvier 2010
19 janv. 2010 à 12:44
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!
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 janv. 2010 à 12:46
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]
0
valoch33 Messages postés 5 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 19 janvier 2010
19 janv. 2010 à 13:02
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
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
19 janv. 2010 à 14:07
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]
0
Rejoignez-nous