2010-10-28 4 views
1
bool print_date(Date *d, char **argv) { 

     if (isdigit(*argv+1)) { 
       return printf("is d"); 
     } else { 
       return printf("is not d"); 
     } 

} 

La fonction ci-dessus ne fonctionne pas. * argv + 1 est l'entrée de l'utilisateur, est-ce une chaîne ou quels types en passant? Quelqu'un peut-il aider?Chiffre de contrôle de programmation C

int main(int argc, char *argv[]) 
{ 

    Date d; 

    get_date(&d, argv); 


} 
+4

Vous devez dire ce qui ne fonctionne pas pour vous. Cependant * argv est un char * (pointeur sur char), donc * argv + 1 est l'adresse du second caractère, pas le caractère lui-même. Vous avez peut-être voulu dire ** (argv + 1). –

+0

Si vous n'êtes pas sûr de la précision, ** utilisez des parenthèses **. Plutôt que '* argv + 1' utiliser' (* argv) + 1' (ou même '& (argv [0] [1])') – pmg

Répondre

3

*argv+1 calcule l'adresse du premier caractère du 0-ième argument (qui est le nom de l'exécutable) et ajoute 1 à passer à la deuxième ombles de celui-ci .. Je ne pense pas que ce soit ce que vous voulez faire.

Vous pouvez essayer en utilisant argv[1], cela signifiera le premier argument après le nom de l'exécutable, en tant que char *.

+0

remercie votre commentaire, mais isdigit ne fonctionne toujours pas – friends

+0

bien sûr, il ne fonctionne pas , 'isdigit' suppose un seul caractère en utilisant' argv [1] 'vous donnera toute la chaîne, pas seulement un caractère. Vous devriez le déréférencer à nouveau pour obtenir le type 'char' réel. – Jack

+0

comment le déréférencer? Je suis un beignning de C – friends

0

Je devine que ce que vous voulez vraiment est *(argv + 1). La façon dont vous l'avez écrit est qu'il va déréférencer le premier caractère du programme, en ajouter un, puis tester s'il s'agit d'un chiffre.