我想尝试由标志控制的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);
}
}