为什么 while 循环中的可变参数模板函数不打印到控制台?



我想尝试由标志控制的while循环语句,该语句打印语句并使用可变模板函数接受用户输入?这可能吗?

#include <iostream>
template<typename... _args> void write(_args && ...args) { ((std::cout << args), ...); }
template<typename... __args> void read(__args && ...args) { ((std::cin >> args), ...); }
auto main() -> int {
int a;
while(a > 100) {
write("Enter a number: ");
read(a);
}
}

如注释中所述,变量a未初始化。因此,该变量包含一个垃圾值,因此它将导致运行时错误。

因此,首先初始化变量,然后对其运行while循环。并且代码需要使用variadic模板函数获取用户输入。所以你可以这样做:

#include <iostream>
template<typename... _args> void write(_args && ...args) { ((std::cout << args), ...); }
template<typename... __args> void read(__args && ...args) { ((std::cin >> args), ...); }
auto main() -> int {
int a;
// To initialize a
write("Enter a number: ");
read(a);
while(a > 100) {
write("Enter a number: ");
read(a);
}
}

如果允许do-while循环,则以下也是可能的解决方案:

#include <iostream>
template<typename... _args> void write(_args && ...args) { ((std::cout << args), ...); }
template<typename... __args> void read(__args && ...args) { ((std::cin >> args), ...); }
auto main() -> int {
int a;
do {
write("Enter a number: ");
read(a);
}while(a > 100);
}
int a;

您声明了a,但没有初始化它,这意味着a未初始化,可以保存一些随机值。

您可以通过使用大于100的值初始化a来解决此问题,例如:

int a = 101;

所以你的代码应该是这样的:

#include <iostream>
template<typename... _args> void write(_args && ...args) { ((std::cout << args), ...); }
template<typename... __args> void read(__args && ...args) { ((std::cin >> args), ...); }
auto main() -> int {
int a = 101;
while(a > 100) {
write("Enter a number: ");
read(a);
}
}

相关内容

  • 没有找到相关文章

最新更新