2 votes

Problème lors de la vérification si une chaîne est un nombre en c

Pour un problème en classe CS50, je dois vérifier si une clé est valide, c'est-à-dire si l'entrée donnée par l'utilisateur est un nombre. J'ai essayé différents codes mais à chaque fois, s'il y a au moins un chiffre dans l'entrée, il retourne que la clé est correcte. Pourtant, elle ne devrait être correcte que si tous les caractères de la chaîne sont des chiffres...

#include <cs50.h>
#include <stdio.h>
#include <string.h>
# include <ctype.h>

int main(int argc, string argv[])
{
    if (argc !=2)
    {
        printf("Usage: %s key\n", argv[0]);
        return 1;    
    }
    else 
    {   
        for (int i = 0; i <= (strlen(argv[1])); i++)
        {
            if (isalpha(argv[1][i]))
            {
                printf("Usage: ./caesar key \n");
                return 1;
            }

            else
            {
                printf("%s\n", argv[1]);
                return 0;
            }
        }
    }
}

Lorsque l'entrée est supérieure à 2 chaînes de caractères, il devrait retourner 1 (cela fonctionne) ;

Lorsque la chaîne [1] n'est pas un nombre, elle devrait renvoyer 1 (cela fonctionne aussi) ;

lorsque la chaîne [1] est un nombre, il devrait imprimer les 2 chaînes (ne fonctionne pas) ;

Par exemple : Je m'attends à ce que ./caesar 222f renvoie : Utilisation : ./caesar key, mais la sortie réelle est 222f.

0voto

Michael Horn Points 523

Votre code ne vérifie que le premier caractère de la chaîne - Il renvoie toujours un résultat basé sur le fait que le premier caractère est ou n'est pas un chiffre.

Au lieu d'imprimer le résultat positif dans la boucle, attendez plutôt que la boucle itère sur tous les caractères, et ne revenez que si un caractère non numérique est trouvé :

#include <cs50.h>
#include <stdio.h>
#include <string.h>
# include <ctype.h>

int main(int argc, string argv[])
{
    if (argc !=2)
    {
        printf("Usage: %s key\n", argv[0]);
        return 1;    
    }
    else 
    {   
        for (int i = 0; i <= (strlen(argv[1])); i++)
        {
            if (isalpha(argv[1][i]))
            {
                printf("Usage: ./caesar key \n");
                // Return early for badly formed argument
                return 1;
            }
        }

        // Now that all chars have been validated, print the argument
        printf("%s\n", argv[1]);
        return 0;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X