while 루프 내용을 무시하는 프로그램, 루프 내부 메서드에 액세스해야 할 때 충돌

user3280790

다음 설명으로 수업 프로그램을 작성 중입니다.

"이브는 아름다운 공주 였고 많은 구혼자들이 그녀를 구했습니다. 그녀는 다음 절차에 따라 그녀가 결혼 할 사람을 결정하기로 결정했습니다. 그녀는 남자들을 줄 서서 그들의 위치에 따라 번호를 줄 것입니다 (첫 번째 줄에 1, 두 번째는 2, 등등). 그녀가 줄에있는 세 번째 사람에 도달 할 때마다 그 사람은 줄에서 제거됩니다. 그녀가 줄의 끝에 도달 할 때마다 그녀는 처음부터 계속 계산합니다. 줄의 마지막 사람은 그녀와 결혼하는 영광을 누리십시오. "

문제는 코드를 실행할 때마다 대답으로 엄청나게 많은 수를 얻는다는 것입니다. cout을 사용한 테스트는 프로그램이 while 루프의 내용을 건드리지 않음을 보여줍니다. while 루프가 제거되면 프로그램이 '벡터 반복기 + 오프셋 범위를 벗어남'및 "표준 C ++ 라이브러리가 범위를 벗어남"과 충돌합니다.

나는 while 루프 자체에 프로그램 충돌을 일으키는 문제가 있음을 이해하고 있으며, 무엇을 알아 내기 위해 며칠 동안 작업 해 왔습니다. 내가 이해하지 못하는 것은 프로그램이 처음에 while 루프를 무시하는 이유입니다. 모든 조언을 주시면 대단히 감사하겠습니다.

// EveSuitor.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;

class EveSuitor
{
    vector<int> newList;

public:

    EveSuitor::EveSuitor(vector<int> list)
    {
    vector<int> newList = list;
    }


    void setUpSuitors(vector<int>list);
    int chooseWinner(vector<int>list);

    int suitorCounter;
    int suitorTotal;

};



void EveSuitor::setUpSuitors(vector<int>v)
{
    int numOfSuitors;
    cout<< "Enter in the number of suitors that are there: ";
    cin>> numOfSuitors;

    for (int i = 0; i < numOfSuitors; i++)
    {
        v.push_back(i);
    }

    for (unsigned int j = 0; j < v.size(); j++)
    {
        cout<< v[j] << " ";
    }
}
int EveSuitor::chooseWinner(vector<int>v)
{
    while (v.size() > 1)
    {
        v.erase(v.begin()+suitorTotal);

        for (unsigned int j = 0; j < v.size(); j++)
        {
            cout<< v[j] << " ";
        }   

        suitorTotal = suitorTotal + suitorCounter;

        if (suitorTotal > v.size())
        {
            suitorCounter = suitorTotal - v.size();//This will reset the counter for the suitor, so that it will move on to the next suitor at the beginning of the list.
            suitorTotal = 0;
        }
        else
        {
            suitorCounter = suitorCounter + 3;
            suitorTotal = suitorTotal + 3;
        }
    }
    if (v.size() == 1)
    {
        return v[0];
    }

}

int _tmain(int argc, _TCHAR* argv[])
{

    int suitorTotal = 3;
    int suitorCounter = 3;
    vector<int>listOfSuitors;

    EveSuitor list(listOfSuitors);

    list.setUpSuitors(listOfSuitors);
    int winner = list.chooseWinner(listOfSuitors);

    cout<<"The position you should be at is: " << winner;
    return 0;
}
Xarn

목록이 채워지지 않았습니다. 귀하의 setUpSuitors기능의 서명이 setUpSuitors(vector<int> v)이 있다고하는 수단, vector즉, 함수는 벡터의 복사에 액세스 할 수 있습니다, 값에 의해 전달됩니다. 함수 내에서 벡터를 수정하려면 다음과 같이 참조로 전달해야합니다 setUpSuitors(vector<int>& v)(참고 &).

우스꽝스러운 숫자를 얻는 이유는 return v[0];진술을 지키는 if의 거짓 분기를 취하기 때문에 chooseWinner에서 돌아 오지 않기 때문 입니다. (구현 세부 사항으로 인해 반환 대신 의사 난수 값이 사용됩니다.)


충돌에 관해서는 :

오류 메시지는를 사용하여 벡터에서 삭제하려고 할 때 문제가 발생했음을 알려줍니다 v.erase(v.begin()+suitorTotal);. 두 가지 문제가 있습니다

1) suitorTotal둘 다 suitorCounter실제로 클래스 내부에서 초기화 되지 않습니다 . 예를 들어 생성자에 전달하여이를 수정하거나 나중에 설정할 수 있습니다.

2) 이름이 오해의 소지 가없는 v.begin() + suitorTotalv.end(),에서 작동하지 않는와 동등한 반복자를 제공합니다 erase. 다음에 삭제할 구혼자를 선택하는 논리를 재고해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Android, 내 프로그램이 while 루프에 붙어 있기 때문에 충돌이 발생합니다.

분류에서Dev

부울을 반환하려고 할 때 프로그램 충돌

분류에서Dev

Fragment 내부에 FragmentPagerAdapter가있는 ViewPager가 트랜잭션을 시작할 때 응용 프로그램을 충돌시킵니다.

분류에서Dev

내장 함수를 사용할 때 프로그램 충돌

분류에서Dev

유성에서 세션을 사용할 때 응용 프로그램 충돌

분류에서Dev

while 루프 외부에서 선언 된 변수는 스칼라의 while 루프 내부에서 액세스 할 수 없습니다.

분류에서Dev

포인터의 내용을 검색 할 때 프로그램 충돌

분류에서Dev

while 루프 내에서 break 문을 사용할 때 Python 프로그램이 잘못된 출력을 제공합니다.

분류에서Dev

do while 루프에서 C 프로그램 충돌

분류에서Dev

while 루프 내부에 할당 된 전역 변수는 루프 외부에서 사용할 수 없습니다.

분류에서Dev

busybox의 inittab에서 시작할 때만 응용 프로그램 충돌

분류에서Dev

while 루프 내부의 if 문에 연결할 수없는 코드

분류에서Dev

for / while 조건에 대해 루프 내부 루프를 사용하여 행별로 테이블을 채 웁니다.

분류에서Dev

for 루프 내에서 변수에 액세스하려고 할 때 오류 발생

분류에서Dev

충돌을 일으키는 while 루프

분류에서Dev

while 루프 내부의 다른 while 루프, 무한 루프

분류에서Dev

다른 프로그램 내에서 의도적으로 충돌하는 프로그램을 실행 한 다음 원래 프로세스로 돌아갑니다.

분류에서Dev

while 루프 내에서 for 루프 사용

분류에서Dev

Swift 함수에서 함수가 루프 내부에 if 문이있는 for 루프를 포함 할 때 왜 'return'이 for 루프 외부에 있어야합니까?

분류에서Dev

SwiftUI에서 ForEach 루프를 사용하여 프로그램 충돌

분류에서Dev

이 두 변수를 선언 할 때 내 프로그램이 충돌하는 이유는 무엇입니까?

분류에서Dev

useEffect 내부에서 setState를 사용할 때 React 코드에서 무한 루프를 방지하는 방법

분류에서Dev

동일한 프로그램 내에서 충돌시 Qt 응용 프로그램을 자동으로 다시 시작하는 방법은 무엇입니까?

분류에서Dev

Picasso는 때때로 사진을 다운로드하지 않고 내 응용 프로그램을 충돌시킵니다.

분류에서Dev

while 루프 내부의 데이터에 액세스

분류에서Dev

응용 프로그램은 내가 로그인 버튼을 클릭 할 때마다 충돌 계속

분류에서Dev

프로그램을 처음부터 다시 시작하기 위해 C / C ++에서 SWITCH-CASE 구조 내 do-while 루프를 사용하는 방법은 무엇입니까?

분류에서Dev

WHILE 루프 내부에서 FOREACH 루프를 사용하여 여러 열을 만드는 방법

분류에서Dev

메뉴 구동 배열 조작 프로그램에서 삽입 또는 삭제 기능을 호출하려고 할 때 내 프로그램이 충돌하는 이유를 누구든지 말할 수 있습니까?

Related 관련 기사

  1. 1

    Android, 내 프로그램이 while 루프에 붙어 있기 때문에 충돌이 발생합니다.

  2. 2

    부울을 반환하려고 할 때 프로그램 충돌

  3. 3

    Fragment 내부에 FragmentPagerAdapter가있는 ViewPager가 트랜잭션을 시작할 때 응용 프로그램을 충돌시킵니다.

  4. 4

    내장 함수를 사용할 때 프로그램 충돌

  5. 5

    유성에서 세션을 사용할 때 응용 프로그램 충돌

  6. 6

    while 루프 외부에서 선언 된 변수는 스칼라의 while 루프 내부에서 액세스 할 수 없습니다.

  7. 7

    포인터의 내용을 검색 할 때 프로그램 충돌

  8. 8

    while 루프 내에서 break 문을 사용할 때 Python 프로그램이 잘못된 출력을 제공합니다.

  9. 9

    do while 루프에서 C 프로그램 충돌

  10. 10

    while 루프 내부에 할당 된 전역 변수는 루프 외부에서 사용할 수 없습니다.

  11. 11

    busybox의 inittab에서 시작할 때만 응용 프로그램 충돌

  12. 12

    while 루프 내부의 if 문에 연결할 수없는 코드

  13. 13

    for / while 조건에 대해 루프 내부 루프를 사용하여 행별로 테이블을 채 웁니다.

  14. 14

    for 루프 내에서 변수에 액세스하려고 할 때 오류 발생

  15. 15

    충돌을 일으키는 while 루프

  16. 16

    while 루프 내부의 다른 while 루프, 무한 루프

  17. 17

    다른 프로그램 내에서 의도적으로 충돌하는 프로그램을 실행 한 다음 원래 프로세스로 돌아갑니다.

  18. 18

    while 루프 내에서 for 루프 사용

  19. 19

    Swift 함수에서 함수가 루프 내부에 if 문이있는 for 루프를 포함 할 때 왜 'return'이 for 루프 외부에 있어야합니까?

  20. 20

    SwiftUI에서 ForEach 루프를 사용하여 프로그램 충돌

  21. 21

    이 두 변수를 선언 할 때 내 프로그램이 충돌하는 이유는 무엇입니까?

  22. 22

    useEffect 내부에서 setState를 사용할 때 React 코드에서 무한 루프를 방지하는 방법

  23. 23

    동일한 프로그램 내에서 충돌시 Qt 응용 프로그램을 자동으로 다시 시작하는 방법은 무엇입니까?

  24. 24

    Picasso는 때때로 사진을 다운로드하지 않고 내 응용 프로그램을 충돌시킵니다.

  25. 25

    while 루프 내부의 데이터에 액세스

  26. 26

    응용 프로그램은 내가 로그인 버튼을 클릭 할 때마다 충돌 계속

  27. 27

    프로그램을 처음부터 다시 시작하기 위해 C / C ++에서 SWITCH-CASE 구조 내 do-while 루프를 사용하는 방법은 무엇입니까?

  28. 28

    WHILE 루프 내부에서 FOREACH 루프를 사용하여 여러 열을 만드는 방법

  29. 29

    메뉴 구동 배열 조작 프로그램에서 삽입 또는 삭제 기능을 호출하려고 할 때 내 프로그램이 충돌하는 이유를 누구든지 말할 수 있습니까?

뜨겁다태그

보관