我有一个关于“捕捉输出”的问题。 putchar (tolower (VAR));
< - 这会以小写字母打印我刚刚通过std::getline (std::cin, VAR);
输入的内容。我不想打印这个。如何“捕获”此输出,不在命令提示符下显示?
示例:输入“TeSTIngThis” - >输出:“testingthis”
for (unsigned i = 0; i < VAR.length (); i++)
{
char TEMP = VAR[i];
VAR[i] = putchar (tolower (TEMP));
}
答案 0 :(得分:2)
目前尚不清楚你想要什么。你的循环很容易 重写:
std::transform(
var.begin(), var.end(),
var.begin(),
[]( char ch) { tolower( static_cast<unsigned char>( ch ) ); } )
如果像我们大多数人一样,你没有C ++ 11,那么你必须这样做 为tolower创建一个功能对象。但是,如果你 需要这一次,你可能会再次需要它,这是有道理的 将这样的功能对象放在工具箱中。 (这是真的 即使你有C ++ 11:
std::transform( var.begin(), var.end(), var.begin(), ToLower() );
比使用lambda的形式更清晰,更简单 表达。)
请注意,我已经消除了你未定义的行为
建议:你不能直接调用一个参数tolower
使用char
而不会冒未定义的行为。
答案 1 :(得分:2)
听起来您需要做的是在Windows中使用getch()
或getche()
,对于Linux,您可以使用this page中描述的方法。有了这个,您可以从stdin获取字符输入,有或没有回显到stdout。