इनपुट पार्सिंग समस्याएं

जब कोई उपयोगकर्ता संदर्भ स्ट्रिंग बनाने के लिए अंकों के बीच रिक्त स्थान में प्रवेश करता है तो यह सब कुछ बंद कर देता है और अगले सीन तक संख्याएं भी ले जाएगा। यदि उनके पास अक्षरों के बीच अक्षर हैं और कोई स्थान नहीं है तो यह ठीक काम करता है। असाइनमेंट पृष्ठ प्रतिस्थापन सिम के लिए था।

कोड (यह केवल उस कोड का हिस्सा है जो मेरी समस्या को प्रभावित करेगा):

void main()
{
    bool again = false;
    bool reuse = false;
    bool valid;
    int use;
    int refLength;
    vector ref(0);
    vector
 frames(0);
    string refString;
    string user;

    //ask how long the user wants the ref string to be
    do{
        valid = false;
        while (!valid&&!reuse)//take choice of ref string
        {
            cout << "How long do you wish the reference string to be? ";
            if (!(cin >> refLength))
            {
                cin.clear();//.clear and .ignore keep cin from errors and forced infinite loop repeating following cout
                cin.ignore(numeric_limits::max(), '\n');
                cout << "The length must be enter as an integer value between ";
                valid = false;

            }

            else
            {
                cout << "You have chosen to have a Ref string of " << refLength << " length " << endl;
                valid = true;
            }
        }
        valid = false;

        while (!valid&&!reuse)
        {
            cout << "Do you want to enter a ref string or randomly generate one" << endl;
            cout << "of your chosen length? Enter 1 to generate and 2 to input the string ";
            if (!(cin >> use) | (use<0 || use>2))
            {
                cin.clear();//.clear and .ignore keep cin from errors and forced infinite loop repeating following cout
                cin.ignore(numeric_limits::max(), '\n');
                cout << "You must enter an integer between 1 and 2";

            }
            else
            {
                valid = true;
                if (use == 1)
                {
                    make(ref, refLength);
                }
                else
                {
                    cout << "please enter a ref string of chosen length entering" << endl;
                    cout << "fewer digits will cause 0's to be added. Entering more" << endl;
                    cout << "will cause those past the chosen length to be dropped " << endl;
                    cout << "any letters will be ignored but spaces throw things off" << endl;
                    cout << "Also all entries must be single digit integers (0-9) " << endl;
                    cin >> refString;
                    make(ref, refLength, refString);
                }
                use = 0;
            }

        }
        cout << endl;
        /*for(int i=0;i<<<" ";
        }*/
        valid = false;
        while (!valid)
        {
            cin.clear();
            //errors ********************************************88
            cout << "How many frames do you want (1-7) ";
            if (!(cin >> use) | (use<0 || use>7))
            {
                cin.clear();
                cin.ignore(numeric_limits::max(), '\n');
                cout << "You must enter an integer between 1 and 7 ";
                valid = false;
            }
            else
            {
                valid = true;
                setUpFrames(use, frames);
                use = 0;
            }
        }
        valid = false;
        while (!valid)
        {
            cout << "Enter 1 for FIFO or 2 for LRU pageRep algo or 3 for Optimal";

            if (!(cin >> use) | (use<0 || use>3))
            {
                cin.clear();
                cin.ignore(numeric_limits::max(), '\n');
                cout << "Must be int between 1 and 3";
            }
            else if (use == 1)
            {
                cout << endl << "# of Page Faults ";
                cout << FIFO(ref, frames);
                valid = true;
            }
            else if (use == 2)
            {
                cout << endl << "# of Page Faults ";
                cout << LRU(ref, frames);
                valid = true;
            }
            else
            {
                cout << endl << "# of Page Faults ";
                cout << Optimal(ref, frames);
                valid = true;
            }

        }
        cout << endl;
        cout << "do you want to try again ? Enter y for yes anything else for no" << endl;
        cin >> user;
        if (user == "y")
        {
            again = true;
            cout << "do you want to use the same reference string? y for yes anything else for no" << endl;
            cin >> user;
            if (user == "y")
            {
                reuse = true;
            }
            else
            {
                reuse = false;
            }
        }
        else
        {
            again = false;
        }    
    } while (again);    
}
0
क्या आप इसे एक और कॉम्पैक्ट उदाहरण में कम कर सकते हैं जो आपकी समस्या का प्रदर्शन करता है?
जोड़ा लेखक Barmar, स्रोत
आपकी समस्या दिखाने के लिए यह बहुत अधिक कोड है। आम तौर पर, यदि आपको उपयोगकर्ता इनपुट को पार्स करने की आवश्यकता है तो आपको इनपुट कोड के विवरण प्राप्त करने के लिए उपयोगकर्ताओं पर भरोसा करने के बजाय getline का उपयोग करना चाहिए और इनपुट स्ट्रिंग को पार्स करना चाहिए।
जोड़ा लेखक Pete Becker, स्रोत
मेरी तत्काल सलाह इसे समझदार कार्यों में तोड़ना होगा। अभी आपके पास सिमुलेशन कोड के साथ यादृच्छिक रूप से इंटरमीक्स किए गए उपयोगकर्ता से पैरामीटर प्राप्त करने के लिए कोड है, जिससे इसे किसी एक का पालन करना लगभग असंभव हो जाता है।
जोड़ा लेखक Jerry Coffin, स्रोत
क्या आपने इसे डीबग किया था? और कृपया यहां पोस्ट कोड में टैब का उपयोग न करें!
जोड़ा लेखक πάντα ῥεῖ, स्रोत

1 उत्तर

यदि आप शब्द/रेखा उपयोग लाइनलाइन द्वारा सीन/कोउट इंटरैक्शन शब्द/रेखा चाहते हैं, अन्यथा भ्रम उत्पन्न होगा।

0
जोड़ा
आह, उसे एक छोटा 3 लाइनर नमूना दे दो ...
जोड़ा लेखक πάντα ῥεῖ, स्रोत