для l oop не выполняется / работает должным образом в C ++ - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь сравнить два целых вектора. Первый l oop в программе выполняется, а второй и третий l oop не выполняется.

vector<int> a,b;
    int range=0;
    cout<<"Enter 1st vector."<<endl;
    for(int n=0;cin>>n;)
    {
        a.push_back(n);
    }
    cout<<"Enter 2nd vector."<<endl;
    for(int n=0;cin>>n;)
    {
        b.push_back(n);
    }
    if(a.size()>b.size())
        range=b.size();
    else
        range=a.size();
    cout<<"\nThird loop."<<endl;
    for(int i=0;i<range;i++)
    {
        if(a[i]!=b[i])
            goto here;
    }
    cout<<"\nSame vectors."<<endl;
    return 0;

This is the output.

1 Ответ

0 голосов
/ 29 марта 2020

Вы получаете это поведение из-за использования cin >> n как условного. Во время первого выполнения l oop он продолжает возвращать cin (который является экземпляром std :: istream), который является допустимым ненулевым указателем. Но когда вы нажимаете ctrl-z, основной поток становится недействительным и начинает возвращать nullptr. Следовательно, cin>>n в секунду l oop оценивается как ложное, а l oop не выполняется. Затем вы устанавливаете диапазон равным размеру вектора b, который равен нулю, поэтому третье значение l oop не выполняется.

Проверьте эту ссылку на стек-поток для получения дополнительной информации об использовании cin в качестве условного if (cin >> x) - Почему вы можете использовать это условие?

Если вы хотите использовать cin в качестве условного выражения для l oop, разбейте l oop на основе таких условий, как n == SomeSpecificEndValue, а не ctrl -z

...