将字符值输入int数组?

时间:2015-09-19 09:47:58

标签: c++

这是我写的程序:

    #include<iostream>
    using namespace std;

    int main()
    {
        int hex[16];
        cout << "enter the 16 hexadecimal numbers\n";
        for(int i = 0;i < 16;i++)
        {
            cin >> hex[i];
            cout << "input worked\n";
        }
    }

enter image description here

您能否向我解释为什么&#34;输入有效?&#34;输入&#39; a后再次显示输出。 如果我这样做,该程序是否应该停止?

我的意思是为什么&#34;输入工作&#34; cin停止输入后的行输出?我的意思是如果从cin获取输入有问题,为什么cout仍在工作?

4 个答案:

答案 0 :(得分:2)

您必须通过std :: hex传递它,否则它只接受一个整数,您的输入流在内部切换到错误状态,并跳过下一次迭代的输入。这就是你看到剩余迭代的输出的原因。

cin >> std::hex >> hex[i];

答案 1 :(得分:1)

你应该写

if(cin >> hex >> hex[i]) {
    cout << "input worked\n";
}
else {
    string dummy;
    cin.clear();
    cin >> dummy;
}

确定输入是否有效。对于hex IO操纵器,您必须#include <iomanip>

答案 2 :(得分:1)

默认输入流如std::cin期望整数输入为十进制(字符'0' - '9')。如果您想输入十六进制,则需要使用std::hex

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int hex[16];
    cout << "enter the 16 hexadecimal numbers\n";
    for(int i = 0;i < 16;i++)
    {
        // hexedicimal
        cin >> std::hex >> hex[i];
        cout << "input worked\n";
    }
}

此外,您应该在阅读后始终检查信息流。

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

int main()
{
    int hex[16];
    cout << "enter the 16 hexadecimal numbers\n";
    for(int i = 0;i < 16;i++)
    {
        if(cin >> std::hex >> hex[i])
            cout << "input worked\n";
        else
        {
            cout << "bad input try again\n";
            cin.clear(); // remove the error
            std::string skip;
            cin >> skip; // read past bad input
        }
    }
}

答案 3 :(得分:1)

您为数组hex命名的事实与编译器无关。它需要十进制输入。

输入a时,输入无法解析为十进制整数,因此std::cin设置为错误模式。随后对>>的调用不再提示用户输入文本,而是立即返回,使流处于错误状态,直到循环结束。

您可以通过多种方式解决此问题:

  • 在用户输入内容后检查流的状态。 if (!cin) { /* error handling */ }
  • 此外,允许使用std::hex的十六进制输入。

或者完全使用不同的策略。不是直接读取int,而是每次循环迭代都可以将输入的整个读入std::string。然后可以使用C ++ 11的std::stoi将该字符串转换为int,指定基数为16:

#include <iostream>
#include <string>

int main()
{
    int hex[16];
    std::cout << "enter the 16 hexadecimal numbers\n";
    for (int i = 0; i < 16; ++i)
    {
        std::string line;
        std::getline(std::cin, line);
        try
        {
            hex[i] = std::stoi(line, 0, 16);
            std::cout << "input worked: " << hex[i] << "\n";
        }
        catch (std::exception const& exc)
        {
            std::cout << "input failed\n";
        }
    }
}