不可能输入演员?

时间:2017-02-02 07:31:46

标签: c++ windows visual-c++ casting tchar

如何获得命令行参数' up'或者' down'或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[]
  //

}

编辑:只能按照以下方式工作,但这不是正确的做法。

#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]);
    }

}

1 个答案:

答案 0 :(得分:1)

您的代码有多个问题:

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

这不起作用。在C/C++中,您必须使用"来表示字符串文字。此外,您正在比较指针,而不是字符串。

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

另一个问题是_tstof的使用,它在你使用float时将字符串转换为float,就好像它是一个指向字符串的指针,将它转换为已经存在的浮点数。

最后一行:

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[]
  //
}