创建一个字符串变量,并在同一行上要求输入
Create a string variable and ask for input on the same line?
我绝对讨厌这些不必要的步骤在您声明并在一行上分配变量并要求输入的这些不必要的步骤。
要保持简短,我想创建一个变量并要求在同一行上全部输入。
目前我正在写这样的代码:
string name = "";
cout << "Please enter your name: ";
cin >> name; //Too many steps for no reason
这是我的目标:
string name = cin >> name
显然,如果我闭上眼睛和猎物使其工作。
有一个小技巧要这样做吗?我的意思是可以在分配数组时与for-loops一起工作,所以为什么不在一行上声明和输入评估呢?
我知道读者会尝试跳出窗口。 goto
证明了这一理论,是的,我以自豪为:)
任何帮助!
您可以尝试编写模板功能,例如
template <typename T>
T read (std::istream & in = std::cin)
{
T x; in >> x; return x;
}
并像
一样使用它 auto x = read<int>();
如果您想验证用户输入(并且几乎可以肯定 do 想要在现实生活代码中),则可以使用E.G.std::optional
:
template <typename T>
std::optional<T> read (std::istream & in = std::cin)
{
T x; in >> x; return in ? x : std::nullopt;
}
template <typename T>
T read_loop (std::istream & in = std::cin)
{
while (true)
{
auto input = read<T>(in);
if (input) return *input;
in.clear();
std::cout << "try again: ";
}
}
那么有什么问题?如果您有重复的代码(任何不必要的烦人),则只需将其包装在函数/方法中:
template<typename T>
auto consoleInput(std::string_view request) -> T
{
std::cin.sync();
std::cout << request;
T x;
while(! (std::cin >> x)) {
std::cin.clear();
std::cin.ignore(200, 'n');
std::cout << "ntry again: " << request;
}
return x;
}
auto name = consoleInput<std::string>("Provide a name");
https://wandbox.org/permlink/iuwmrmcbcwgjoigu
是的,我以骄傲为:)
您真的不应该。学会编写良好,易于阅读的小功能,其中最简单的控制流。另外,<algorithm>
。
您可以通过移动步骤将变量初始化到函数中来做到这一点:
template<typename T>
auto ask_user(std::string_view message) -> T {
std::cout << message;
T value;
std::cin >> value;
return value;
}
现在您可以这样做:
int main() {
auto name = ask_user<std::string>("What's your name? ");
}
相关文章:
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 在C++中,我如何接受不同于同一行的用户输入
- 如何确保用户在一行上提示输入一次时输入名字和姓氏?
- 忽略一行输入中的某些输入
- 丢失读入的每一行输入中的最后一个令牌
- 一行输入到多个变量
- 如何检查从键盘输入的特定整数值是否存在于C++文件中的一行或多行中
- 通过显示一行星号来创建条形图,该条形图将读取数据的输入文件
- 与 C++ 中一行中的用户输入数组元素相关的问题
- 如何在应用程序进行大量printf时,在固定输入的终端中设置最后一行
- 使用 getline 从输入文件读取一行到输出文件
- 标准输入未读取最后一行
- C :使用getline从文本文件中输入,要么跳过第一行,要么将其余部分弄乱
- 在C++的同一行输入值
- 使用 Getline C++ 将每一行输入存储在数组中
- scanf() 为最后一行输入提供错误的输出
- 如何在只有一行输入的向量中输入多个输入
- 仅对前一行输入使用cin.clear()或cin,ignore()
- 我如何在同一行输入2个不同的变量,同时使用setw进行格式化