布尔值不变?[C++]

Boolean values not changing? [C++]

本文关键字:C++ 布尔值      更新时间:2023-10-16

main:https://github.com/MJGHD/Stacks./blob/master/main.cpp

//Imports needed libraries, headers and defines the size of the question and answer variables
#include <iostream>
#include <cstdlib>
#include <string>
#include "lib/script.h"
#define STRING_SIZE 1000
//Initalises the temporary dummy variable and the question + answer variables
std::string questions[STRING_SIZE];
std::string answers[STRING_SIZE];
//Initalises showMainMenu function
void showMainMenu();

int main() {
    //Shows the main menu
    showMainMenu();
    return EXIT_SUCCESS;
}
void showMainMenu() {
    std::cout << "Welcome to Stack.! To get started, type in the number from 1-4 that you desire!nn";
    std::cout << "1. Create new stackn";
    std::cout << "2. Open existing stackn";
    std::cout << "3. Export existing stackn";
    std::cout << "4. Optionsnn";
    std::cout << "";
    //Assigns the user input to the dummy variable initalised earlier
    std::cin >> dummy.usrInput;
    //Reads the usrInput and figures out what the user wanted
    switch(dummy.usrInput){
        case 1:
            createNewStack();
        case 2:
            openExistingStack();
        case 3:
            exportExistingStack();
        case 4:
            showOptions();
        default:
            std::cout << "That was not a valid input. Press enter to continue... ";
            std::cin.get();
            clearScreen();
    }
}

脚本:https://github.com/MJGHD/Stacks./blob/master/lib/script.h

#include <iostream>
#include <cstdlib>
#include <string>
#include <cstdio>
struct usrOptions{
    bool autosave, randomisedCards;
    std::string autosaveOn, randomOn;
}option;
struct dummies{
    int usrInput;
}dummy;
inline void clearScreen(){
    #ifdef _WIN32
        std::system("cls");
    #else
        std::system ("clear");
    #endif
}
inline void saveUserStack(){
}
void createNewStack(){
}
void openExistingStack(){
}
void exportExistingStack(){
}
void showOptions(){
    clearScreen();
    switch(option.autosave){
        case 0:
            option.autosaveOn = "off";
        case 1:
            option.autosaveOn = "on";
    }
    switch(option.randomisedCards){
        case 0:
            option.randomOn = "off";
        case 1:
            option.randomOn = "on";
    }
    std::cout << "1. Autosave is currently " << option.autosaveOn;
    std::cout << "n2. Randomised cards are currently " << option.randomOn;
    std::cout << "nnWhich option do you wish to change (please enter in the form of an integer): ";
    std::cin >> dummy.usrInput;
    switch(dummy.usrInput){
        case 1:
            std::cout << "Are you sure you wish to change the option for autosave? 0 = no 1 = yes: ";
            std::cin >> dummy.usrInput;
            switch(dummy.usrInput){
                case 0:
                    clearScreen();
                    showOptions();
                default:
                    switch(option.autosave){
                        case 0:
                            option.autosave = 1;
                        default:
                            option.autosave = 0;
                    }
                    showOptions();
                }
        case 2:
            std::cout << "Are you sure you wish to change the option for randomised cards? 0 = no 1 = yes: ";
            std::cin >> dummy.usrInput;
            switch(dummy.usrInput){
                case 0:
                    showOptions();
                default:
                    switch(option.randomisedCards){
                        case 0:
                            option.randomisedCards = 1;
                        case 1:
                            option.randomisedCards = 0;
                    }
                    showOptions();
            }
        default:
            showOptions();
    }    
    std::cout << "Autosave is currently " << option.autosaveOn;
}

出于某种原因,当我验证选项的更改时,值不会更改,或者至少输出保持不变。

看看你的问题,你似乎忘记了在每个开关案例中添加一个中断。

请看下面MSDN上关于使用switch的文章https://msdn.microsoft.com/en-us/library/66k51h7a.aspx

如果你习惯了VB.NET,你可能会习惯于语句的大小写是自包含的。C需要中断,否则即使开关不匹配,逻辑也会进入下一个语句。