【问题标题】:Boolean values not changing? [C++]布尔值不变? [C++]
【发布时间】:2015-12-21 12:48:39
【问题描述】:

主要: 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!\n\n";
    std::cout << "1. Create new stack\n";
    std::cout << "2. Open existing stack\n";
    std::cout << "3. Export existing stack\n";
    std::cout << "4. Options\n\n";
    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 << "\n\nWhich 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;
}

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

【问题讨论】:

  • 欢迎来到 StackOverflow!请注意,问题应该是独立的(即:它们可能包含外部资源,但没有它们应该可以回答)。您可以尝试提供minimal reproducible example
  • 请提取一个最小示例,然后在此处内联发布。就目前而言,您的问题是题外话,请阅读发布指南以获取更多信息。此外,标签不应出现在标题中,这是有原因的,它们有一个单独的位置。
  • “当我验证选项更改时”是什么意思?你在说什么选项?你如何改变它们?您如何验证更改?

标签: c++


【解决方案1】:

查看您的问题,您似乎忘记为每个切换案例添加中断。

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

如果您习惯于 VB.NET,您可能习惯于独立的 case 语句。 C 需要一个 break,否则即使 switch 不匹配,逻辑也会进入下一个语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-08
    • 2023-04-10
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 2012-06-05
    • 2021-02-03
    • 2014-10-19
    相关资源
    最近更新 更多