2017-02-02 2 views
-5

Comment obtenir l'argument 'up' ou 'down' de la ligne de commande ou des valeurs entre 0 et 0.50, 1? (où dois-je utiliser _TCHAR * argv [])? il est impossible de le faire fonctionner, y a-t-il du génie.Impossible de taper cast?

int _tmain(int argc, _TCHAR* argv[]) { 
    double SDK; 

    // command line input: 
    // user.exe up 
    // user.exe down 
    // user.exe 0.50 
    if (argv[1] == 'up') { 

    SDK= _tstof(0.85); // FAIL _T or (TCHAR*) or ... 
    } 
    else if(argv[1]== 'down') { 
    SDK= _tstof(0.50); // FAIL _T or (TCHAR*) or ... 
    } 
    else { 
    SDK= _tstof(argv[1]); // This works 
    } 

    // 
    // 3rd party SDK needs _TCHAR* argv[] 
    // 

} 

EDIT: ne fonctionne que comme ci-dessous, mais ce n'est pas la bonne façon de le faire.

#include "stdafx.h" 
#include <stdio.h> 
#include <windows.h> 

int _tmain(int argc, _TCHAR* argv[]) { 
    double SDK; 

    if (argv[1][0] == 'u') { 
     printf("up: \n"); 
     SDK = 0.85; 
    } 
    else if (argv[1][0] == 'd') { 
     printf("down: \n"); 
     SDK = 0.50; 
    } 
    else { 
     printf("else: \n"); 
     SDK = _tstof(argv[1]); 
    } 

} 
+4

'argv [1] == 'et' up'' argv [1] ==' down'' pourrait ne pas faire ce que vous pensez –

+0

Votre comparaison de chaînes ne fonctionnera pas. Utilisez strcmp. –

+1

@YvesDaoust 'strcmp' ne fonctionnera pas avec des guillemets simples comme ça –

Répondre

1

Votre code a de multiples problèmes:

if (argv[1] == 'up') 

Cela ne fonctionnera pas. Dans C/C++ vous devez utiliser " pour les littéraux de chaîne. En outre, vous comparez les pointeurs, au lieu des chaînes.

if(strcmp(argv[1], "up") == 0) 

Une autre question est l'utilisation de _tstof qui convertit une chaîne à un flotteur lorsque vous utilisez un flotteur comme si elle était un pointeur sur une chaîne pour le convertir en un flotteur qui est déjà.

La dernière ligne:

SDK= _tstof(argv[1]); 

peuvent ne pas fonctionner à moins que votre argument est une représentation de chaîne d'un nombre. Donc, vous pouvez vérifier si la chaîne est vraiment un nombre et pas autre chose.

#include <Windows.h> 
#include <WinNT.h> 
int _tmain(int argc, TCHAR* argv[]) { 
    double SDK; 

    // command line input: 
    // user.exe up 
    // user.exe down 
    // user.exe 0.50 
    if (strcmp(argv[1], "up") == 0) 
    SDK= 0.85; 
    else if(strcmp(argv[1], "down") == 0) 
    SDK= 0.50; 
    else 
    SDK = atof(argv[1]); 

    // 
    // 3rd party SDK needs _TCHAR* argv[] 
    // 
} 
+0

Studio visuel 2015: if (_tcscmp (argv [1], "up") == 0) est une erreur. l'argument de type "char * est incompatible avec le paramètre de type" const wchar_t " – YumYumYum

+1

Ensuite, les paramètres de votre projet sont faux, parce que le point d'utiliser TCHAR est d'éviter de tels problèmes.Par ailleurs, vous pouvez utiliser' strcmp' à la place – Devolus

+0

quand j'utilise if (strcmp (argv [1], "up") == 0), est aussi erreur, l'argument de type "_TCHAR *" est incompatible avec le paramètre de type "const char *" – YumYumYum