我正在尝试使用菜单在主程序中调用此过程,并且仅输入一个数字,然后返回主程序。我还想将这个数字存储在一个数组中,这样如果我愿意,我可以将多个数字放入数组中并将它们保留在索引中。
void procedure1(int Num1[], int size = 10)
{
for (int x = 0; x < size; x++)
{
cout << "Input a number: ";
cin >> Num1[x];
}
}
它输出“输入数字”10 次,我只希望它执行一次,但将第一个数字存储在 Num1[0] 中,将下一个输入的数字存储在 Num1[1] 中...依此类推,直到 Num1 [10]
您可以通过正确使用
cin.ignore()
来解决这个问题,但老实说,这比它的价值要复杂得多,而且有时甚至不可能。
我的建议是始终将数据作为字符串读入,然后验证输入。这是一个例子:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{
for(int x = 0; x < 10; ++x)
{
std::cout << "Enter a number:\n";
std::string in;
std::getline(cin, in);
int num = 0;
std::istringstream ss{in};
// Validate input here
if(ss >> num)
{
std::cout << "Entered: " << num << '\n';
}
else
{
std::cout << "Invalid Nuber!" << '\n';
}
}
return 0;
}
鉴于此输入:
10
20
30
NOT A NUMBER
40
50
60
70
80
90
给出这个输出:
Enter a number:
Entered: 10
Enter a number:
Entered: 20
Enter a number:
Entered: 30
Enter a number:
Invalid Nuber!
Enter a number:
Entered: 40
Enter a number:
Entered: 50
Enter a number:
Entered: 60
Enter a number:
Entered: 70
Enter a number:
Entered: 80
Enter a number:
Entered: 90