将输入的数字存储到整数数组中的过程循环

Procedure loop to store an inputted number into an array of integers

提问人:ChaiTea 提问时间:10/25/2023 最后编辑:ChadChaiTea 更新时间:10/25/2023 访问量:55

问:

我正在尝试使用菜单在我的主程序中调用此过程,并且只输入一个数字,然后返回主程序。我还想将这个数字存储在一个数组中,这样如果我愿意,我可以将多个数字放在数组中并将它们保留在它们的索引中。

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]

C++ 循环菜单 存储

评论

0赞 Chad 10/25/2023
看看 ,或者(我建议)使用而不是从 stdin 读取混合类型cin.ignore()std::getline()

答:

1赞 Chad 10/25/2023 #1

你可以通过正确使用 来解决这个问题,但老实说,这比它的价值要复杂得多,有时甚至是不可能的。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
1赞 Pepijn Kramer 10/25/2023 #2

不要使用“C”样式数组,而是像这样使用std::vector

#include <iostream>
#include <vector>

bool is_valid_input(const std::string& input)
{
    for (const auto c : input)
    {
        if (!std::isdigit(c)) return false;
    }

    return true;
}

std::vector<int> get_user_input()
{
    std::vector<int>  values;
    std::string input;

    do
    {
        std::cout << "Enter digits : ";
        std::cin >> input;
    } while (!is_valid_input(input));

    for(const auto c : input)
    {
        values.push_back(static_cast<int>(c-'0'));
    }

    return values;
}

int main()
{
    auto values = get_user_input();

    for(const int value : values)
    {
        std::cout << value << " ";
    }

    return 0;
}