2017-02-02 5 views
-5

Как получить аргумент командной строки «вверх» или «вниз» или значения от 0 до 0.50, 1? (где я должен использовать _TCHAR * argv [])? невозможно заставить его работать, есть ли гений.Невозможно напечатать литой?

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: работает только ниже, но это не правильный способ сделать это.

#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] == 'up'' и' ARGV [1] ==' down'' не может делать то, что вы думаете –

+0

Ваше сравнение строк не будет работать. Использовать strcmp. –

+1

@YvesDaoust 'strcmp' не будет работать с одинарными кавычками вроде –

ответ

1

Ваш код имеет несколько проблем:

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

Это не будет работать. В C/C++ вы должны использовать " для строковых литералов. Кроме того, вы сравниваете указатели, а не строки.

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

Другой проблемой является использование _tstof, который преобразует строку в число с плавающей точкой в ​​то время как вы используете поплавок, как будто это указатель на строку, чтобы преобразовать его в поплавка, который она уже есть.

Последняя строка:

SDK= _tstof(argv[1]); 

также не может работать, если ваш аргумент не является строковым представлением числа. Таким образом, вы можете проверить, действительно ли строка является числом, а не чем-то другим.

#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

Visual studio 2015: if (_tcscmp (argv [1], «up») == 0) является ошибкой. аргумент типа «char *» несовместим с параметром типа «const wchar_t» – YumYumYum

+1

Тогда ваши настройки проекта неверны, поскольку точка использования TCHAR заключается в том, чтобы избежать таких проблем. В любом случае вы можете использовать 'strcmp' вместо. – Devolus

+0

, когда я использую if (strcmp (argv [1], «up») == 0), также является ошибкой, аргумент типа «_TCHAR *» несовместим с параметром типа «const char *» – YumYumYum