using namespace std;

int main(){

    // Variable declarations
    string hours = "";
    double empHours = 0;
    bool cont = true;

    do{
        // Get input of how much employee worked in a week.
        cout << "Enter hours worked in a week: " ;
        getline(cin, hours);

        // Convert the input using string stream for easier validation.
        stringstream hours_input(hours);

        for(int i = 0; i <= hours[i]; i++)
            // Check if input contains any alphabets e.g 90abc, if yes than repeat loop and ask user for input again.
            if(isalpha(hours[i]))
                cont = true;
            // If the input successfully converts to double type
            else if(hours_input >> empHours)
            // Check if values are values >= 0, if yes than exit the loop
                if(empHours >= 0){
                    hours_input >> empHours;    // Assign value to empHours and exit loop
                    cont = false;
            }
            //  Check if input contains special characters or any other form of bad input, if yes than repeat loop and ask user for input again.    
            else    
                cont = true;

    }while(cont);

    cout << "Value is: " << empHours << endl;

    return 0;
}

मुझे अब तक यही मिला है। मुझे यकीन नहीं है कि त्रुटि को कैसे प्रदर्शित किया जाए "यह एक वैध विकल्प नहीं है, कृपया पुनः प्रयास करें।" और फिर से इनपुट मांगें। कोड काम करता है हालांकि उल्लिखित त्रुटि को प्रदर्शित करने के बजाय, यह प्रदर्शित करता है "एक सप्ताह में काम किए गए घंटे दर्ज करें:"।

बस, त्रुटि को लूप करते रहें "यह एक मान्य विकल्प नहीं है, कृपया पुन: प्रयास करें।" और इनपुट मांगना, जब तक कि एक वैध इनपुट प्रदान नहीं किया जाता है।

मान्य इनपुट कोई भी पूर्णांक या फ्लोट number >= 0 होना चाहिए। अमान्य इनपुट कोई विशेष वर्ण, अक्षर और किसी भी प्रकार की नकारात्मक संख्याएं हैं।

c++
0
Hirnesh 26 अगस्त 2018, 10:46

2 जवाब

आप बस एक while लूप का उपयोग कर सकते हैं।

यह कुछ इस तरह जा सकता है:

while(true){
   cin>>foo;
   if(check if foo is a valid input){
      break; //if the input is valid
  }
cout<<"error, try again";
}
1
wdc 26 अगस्त 2018, 10:56

वर्तमान में, आपके कोड में आपके त्रुटि संदेश को प्रिंट करने के लिए कुछ भी नहीं है। ऐसा लगता है कि आप पहले से ही त्रुटि परिदृश्य को संभाल रहे हैं, इसलिए इसे जोड़ना इतना कठिन नहीं है।

यदि आप अपने for लूप में else केस को इस तरह बदलते हैं, तो इसे काम करना चाहिए:

for(int i = 0; i <= hours[i]; i++)
    // Check if input contains any alphabets e.g 90abc, if yes than repeat loop and ask user for input again.
    if(isalpha(hours[i]))
    {
        cout << "That is not a valid option, please try again." << endl;
        cont = true;
    }
    // If the input successfully converts to double type
    else if(hours_input >> empHours)
    // Check if values are values >= 0, if yes than exit the loop
        if(empHours >= 0){
            hours_input >> empHours;    // Assign value to empHours and exit loop
            cont = false;
    }
    //  Check if input contains special characters or any other form of bad input, if yes than repeat loop and ask user for input again.    
    else
    {
        cout << "That is not a valid option, please try again." << endl;
        cont = true;
    }

हालाँकि आपको कुछ दोहराव को रोकने के लिए अपने कोड को थोड़ा सा रीफैक्टर करने पर विचार करना चाहिए। यदि आप उदाहरण के लिए एक अलग फ़ंक्शन में इनपुट को मान्य करते हैं, तो आपके पास अभी जो दोहराव है, उसके बजाय आपके पास त्रुटि प्रबंधन का एक स्पष्ट स्थान हो सकता है।

1
Patrick Kostjens 26 अगस्त 2018, 10:58