โค้ด Visual Studio ที่ไม่สามารถเข้าถึงได้ c # ทำในขณะที่วนซ้ำ

ฉันกำลังพยายามเขียนโค้ด (ใน Visual Studio 2012 โดยใช้ c#) ที่จะอนุญาตให้ผู้ใช้เลือกบัญชีโดยใช้ 1,2,3 หรือ 4 ฉันกำลังใช้ do- While loop ดังนั้นฉันจึงสามารถใช้ 0 เพื่อออก (break? ) หรือรันลูปอีกครั้งจนกว่าจะเลือกตัวเลือกที่ถูกต้อง

ปัญหาคือ Visual Studio บอกฉันว่ารหัส validAccount = true; ไม่สามารถเข้าถึงได้ และจะไม่ยอมให้ฉันทดสอบ เนื่องจากวิธีนี้ควรส่งคืนค่าด้วย ฉันมีข้อผิดพลาด "เส้นทางโค้ดไม่ทั้งหมดส่งคืนค่า" และฉันเริ่มสับสนจริงๆ นี่คือรหัสของฉัน:

    static int chooseAccount() {
        bool validAccount = false;
        do {
            Console.Clear();
            Console.WriteLine("Select an Account: \r\n 1: Savings \r\n 2: Debit \r\n 3: Credit \r\n 4: Investment");
            int inputNumber = int.Parse(Console.ReadLine()); //by declaring int inputNumber here we save having an extra line.
            if ((inputNumber >= 1) && (inputNumber <= 4)) {
                return inputNumber;
                validAccount = true;
            }
            else if (inputNumber == 0) {
                break;
            }
            else {
                Console.WriteLine("Error: please choose an account using 1, 2, 3, 4 or 0 to exit");
            }
        } while (!validAccount);
    }//end chooseAccount

บางทีฉันอาจจะจ้องมองสิ่งนี้มานานเกินไปและไม่สามารถมองเห็นความผิดพลาดง่ายๆ ที่ฉันทำลงไปได้ ฉันยินดีรับมุมมองหรือทิศทางใหม่ๆ ที่จะหาวิธีแก้ไขได้ หากปัญหาประเภทนี้ได้รับการแก้ไขแล้ว (มันค่อนข้างยากที่จะ google สำหรับบางอย่างเช่น "รหัสที่ไม่สามารถเข้าถึงได้" เมื่อรหัสต้องเฉพาะเจาะจงมาก...)


person Kuro    schedule 06.09.2013    source แหล่งที่มา
comment
บรรทัดหลังคำสั่ง return return inputNumber; จะไม่ถูกดำเนินการ คุณไม่จำเป็นต้องตั้งค่า validAccount เนื่องจากค่าของมันจะหายไปจากสแต็กเมื่อคุณกลับมาจากฟังก์ชัน   -  person dcaswell    schedule 06.09.2013
comment
เนื่องจากคุณกำลังกลับมาหรือหลุดจากการวนซ้ำ ตรรกะ validAccount ทั้งหมดจึงซ้ำซ้อนอยู่ดี ทำ{} ในขณะที่ (จริง) ก็เพียงพอแล้ว   -  person Serve Laurijssen    schedule 06.09.2013
comment
ขอบคุณทุกคนสำหรับการตอบกลับอย่างรวดเร็วของคุณ! จบปัญหานั้นอย่างรวดเร็ว! ฉันยังมีเส้นทางโค้ดไม่ทั้งหมดส่งคืนข้อผิดพลาดของค่า มีข้อมูลเชิงลึกบ้างไหม   -  person Kuro    schedule 06.09.2013
comment
ตรวจสอบคำตอบของฉันเพื่อแก้ไขข้อผิดพลาดนั้น   -  person mdenton8    schedule 06.09.2013


คำตอบ (3)


บรรทัดที่มีข้อผิดพลาดเกิดขึ้นหลังจากคำสั่ง return ในทุกกรณี โค้ดของคุณจะออกจากฟังก์ชันบนบรรทัดก่อนหน้า (และคอมไพเลอร์รู้สิ่งนี้) ดังนั้นจึงไม่มีทางไปถึงบรรทัดถัดไป

คุณไม่จำเป็นต้องตั้งค่า validAccount เป็น true เพื่อแยกลูป เนื่องจากคำสั่ง return จะออกจากฟังก์ชัน และจะออกจากลูปโดยอัตโนมัติ

และสุดท้าย หากคุณตั้งค่า validAccount เป็นจริง แล้วกลับมา จะไม่มีฟังก์ชันอื่นใดเข้าถึง validAccount ได้ แล้วทำไมคุณถึงต้องกังวลกับการตั้งค่าให้เป็นจริงด้วย

จริงๆ แล้ว คุณไม่จำเป็นต้องใช้ validAccount เลย เพราะด้วยคำสั่ง break และ return คุณสามารถควบคุมการเข้าและออกจากลูปได้แล้ว สิ่งนี้จะได้ผล:

static int chooseAccount() {
    while(true) {
        Console.Clear();
        Console.WriteLine("Select an Account: \r\n 1: Savings \r\n 2: Debit \r\n 3: Credit \r\n 4: Investment");
        int inputNumber = int.Parse(Console.ReadLine());
        if ((inputNumber >= 0) && (inputNumber <= 4)) {
            return inputNumber;
        }
        else 
        {
            Console.WriteLine("Error: please choose an account using 1, 2, 3, 4 or 0 to exit");
        }
    }
}
person mdenton8    schedule 06.09.2013
comment
โค้ดนี้จะหลีกเลี่ยงไม่ให้พาธของโค้ดทั้งหมดส่งคืนค่าเช่นกัน แต่จะส่งคืน 0 คุณต้องกำหนดค่าโค้ดของคุณให้จัดการกับ 0 ที่ถูกส่งคืนเช่นกัน - person mdenton8; 06.09.2013
comment
ก่อนหน้านี้ คุณ breaked ออกจากลูปหากผู้ใช้ป้อน 0 และไม่มีโค้ดอยู่หลังลูปของคุณ ดังนั้นฟังก์ชันจะไปที่วงเล็บปีกกาปิดท้ายและไม่ส่งคืนสิ่งใดเลย ฟังก์ชันจะต้องคืนค่าเสมอเมื่อมีการประกาศประเภทการส่งคืน ดังนั้นคอมไพเลอร์จึงแสดงข้อผิดพลาด - person mdenton8; 06.09.2013
comment
ขอบคุณ นั่นช่วยได้จริงๆ! ตรงกับที่ฉันต้องการ! - person Kuro; 06.09.2013
comment
ไม่มีปัญหา. ขอให้โชคดีกับโปรแกรมของคุณ! - person mdenton8; 06.09.2013

โปรดทราบว่าคำสั่ง return จะนำคุณออกจากฟังก์ชันทันที จากนั้น validAccount = true; ถัดไปจะไม่ถูกดำเนินการ!

person Ramon Araujo    schedule 06.09.2013
comment
ขอบคุณ นั่นแก้ไขปัญหาหนึ่งได้! ฉันยังคงได้รับเส้นทางโค้ดบางส่วนที่ส่งคืนข้อผิดพลาดของค่า และฉันไม่สามารถเรียกใช้เพื่อทดสอบได้ - person Kuro; 06.09.2013

สลับสองตัวนี้:

return inputNumber;
validAccount = true;
person Gerrie Schenck    schedule 06.09.2013
comment
ไม่มีเหตุผลที่จะต้องตั้งค่า validAccount คุณไม่สามารถเข้าถึง validAccount ได้หลังจากที่ฟังก์ชันส่งคืนแล้ว - person dcaswell; 06.09.2013