dream_aleaf 2023-09-16 20:55 采纳率: 28.6%
浏览 3
已结题

我想要判断较短的数组是否是较长数组的前缀,我想要先输入数组元素

我想要判断较短的数组是否是较长数组的前缀,我想要先输入数组元素,可是为什么两个while不能连着一起使用呢?

#include <iostream>
#include <vector>
using std::cin; using std::cout;
using std::endl; using std::vector;
int main()
{
    vector<int> ivec1, ivec2;
    int num;
    cout << "Enter the first vector:";
    while (cin >> num)
        ivec1.push_back(num);
    cout << "Enter the second vector:";
    while (cin >> num)
        ivec2.push_back(num);

    int flag = 1;
    for (int i = 0; i < (ivec1.size() <= ivec2.size() ? ivec1.size() : ivec2.size()); ++i)
        if (ivec1[i] != ivec2[i]) {
            flag = 0;
            break;
        }
    if (flag) 
        cout << "YES\n";
    else 
        cout << "NO\n";
    return 0;
}

运行结果如下:

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-09-16 21:05
    关注

    引用 皆我百晓生 小程序回复内容作答:
    两个while循环不能连续使用,是因为cin会在遇到输入错误或者文件结尾时(例如输入结束符或者结束字符),将failbit置位,这会导致后续输入失败。在两个while循环连续使用时,第二个while循环会因为错误的输入状态而无法正常执行。为了解决这个问题,可以在第一个while循环后使用cin.clear()函数清除错误状态,并使用cin.ignore()函数忽略错误的输入,然后再进行第二个while循环的输入。修改后的代码如下:

    #include <iostream>
    #include <vector>
    using std::cin; using std::cout;
    using std::endl; using std::vector;
    
    int main()
    {
        vector<int> ivec1, ivec2;
        int num;
        cout << "Enter the first vector:";
        while (cin >> num) {
            ivec1.push_back(num);
        }
    
        cin.clear();
        cin.ignore(INT_MAX, '\n'); // 清除错误状态并忽略错误的输入
    
        cout << "Enter the second vector:";
        while (cin >> num) {
            ivec2.push_back(num);
        }
    
        int flag = 1;
        for (int i = 0; i < (ivec1.size() <= ivec2.size() ? ivec1.size() : ivec2.size()); ++i) {
            if (ivec1[i] != ivec2[i]) {
                flag = 0;
                break;
            }
        }
    
        if (flag) {
            cout << "YES\n";
        } else {
            cout << "NO\n";
        }
    
        return 0;
    }
    

    这样修改后,就可以连续输入两个数组的元素。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月25日
  • 已采纳回答 9月17日
  • 创建了问题 9月16日