用户输入作为参数C++
User Input as Argument C++
我是编码新手,想知道为什么我的代码没有按照我想要的方式运行。我将代码构建为培训计划,以帮助我练习所学的知识。正如预期的那样,当我注释掉第 19 - 23 行,多行注释部分时,代码似乎工作正常,但是当我不这样做时,它开始意外地运行。
#include <iostream>
int askUserNumber ()
{
std::cout << "Please input a number: " << std::endl; //ask user to input number
int userNumber; //define integer to store input
std::cin >> userNumber; // get input from user
return (userNumber); // return input to caller
}
void printUserNumber (int userNumber)
{
std::cout << "Your number input was: " << userNumber << std::endl; //print input to user screen
}
int main ()
{
/*
std::cout << "Please input your name: " << std::endl; // ask user name
int userName; // variable to store user name
std::cin >> userName; // get user name
*/
printUserNumber(askUserNumber()); // call to askUserNumber to get user input to print to screen
return(0);
}
结果(不注释掉代码(:
请输入您的姓名:
科里
请输入一个数字:
您的数字输入是:"some垃圾号码"
它不允许我在该部分输入数字,它只是打印出一个随机数。
结果(带注释掉代码(:
请输入一个数字:7 您的号码输入是:
7
这次它运行完美,没有问题。我不明白为什么要求用户名的三行导致它不允许我输入一个数字,当 printUserNumber(askUserNumber((( 的函数调用达到它打印"请输入一个数字:"并且不允许我输入一个。感谢您的任何回复。我希望我以良好的格式写下我的问题,并以清晰直接的方式解释我的问题。希望结果部分也能提供一些清晰度。期待解决方案再次感谢。
由于userName
是一个int
,并且您尝试使用std::cin
将一系列非数字字符读入其中,因此操作失败并使std::cin
处于fail()
ed 状态,因此以下operator>>
调用std::cin
都不会成功提取进一步的输入字符。
不允许我在该部分输入数字,它只是打印出一个 随机数。
直到 C++11 年,行为是保持rhs未修改,在您的情况下,这是一个未初始化的int
,因此您在打印时会看到垃圾。
您可以在std::basic_istream::operator>>()
的参考中看到所有这些:
- 如果提取失败(例如,如果在需要数字的地方输入了字母(,
value
保持不变,failbit
已设置。(至C++11(- 如果提取失败,则将零写入值并设置
failbit
。如果提取导致值太大或太小而无法容纳value
,则写入std::numeric_limits<T>::max()
或std::numeric_limits<T>::min()
并设置failbit
标志。(自C++11起(
您仍可以通过清除流中的错误状态标志并忽略缓冲区中的内容来从流中的此类fail()
状态中恢复:
int main()
{
std::cout << "Please input your name: " << std::endl; // ask user name
int userName; // variable to store user name
std::cin >> userName; // get user name
if (!std::cin) // Check if `fail()`
{
std::cout << "input stream failure :-(" << 'n';
// Clearing flags and input buffer
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
}
else
{
std::cout << "Your name input was: " << userName << 'n';
}
printUserNumber(askUserNumber()); // call to askUserNumber to get user input to print to screen
return 0;
}
输出:
Please input your name:
input stream failure :-(
Please input a number:
Your number input was: 7
例如,获得所需行为的解决方案就是简单地将userName
std::string
。在这种情况下,上面的代码会产生输出:
Please input your name:
Your name input was: Corey
Please input a number:
Your number input was: 7
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 如何将enable-if与模板参数和参数包一起使用