Windows控制台上的C可选输入

时间:2014-02-27 17:50:50

标签: c windows input console scanf

此代码不起作用:

_tprintf(TEXT("Enter password or press enter to skip: "));
pszPassword = new TCHAR[100];
int numFields = _tscanf_s(TEXT("%s"), pszPassword, 100);
if (numFields == 0) // never reached
{
    delete[] pszPassword;
    pszPassword = NULL;
}

按Enter键不会使scanf中止解析输入,因为它会跳过空格直到找到非空白字符。

如何实现理想的行为?

该程序实际上是在C中,我使用newdelete代替malloc,但不想使用std::string等。

1 个答案:

答案 0 :(得分:1)

使用fgets在C语言而不是C ++中使用相同的东西,它可以工作:

TCHAR *pszPassword = malloc(100 * sizeof (TCHAR));

_tprintf(TEXT("Enter password or press enter to skip: "));
_fgetts(pszPassword, 100, stdin) ;

if (pszPassword[0] == '\n')
{
  free(pszPassword) ;
  pszPassword = NULL;
}