为什么我需要输入空字符才能继续使用我的控制台应用程序在c++?

uqjltbpv  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(117)

我是一个全新的c++,我正在为学校的小控制台项目工作。我创建了像恒温器这样的东西。当你运行那个应用程序时,它会要求用户输入。

i - informations
t - temperature settings
q - quit
+ - add to temperature by 1
- - remove from temperature by 1

一切都很好,我可以按“i”,我可以按+/-,一切都很好。但当我按“t”,输入一些温度并确认,我会收到正确的React。但现在,无论我按什么,它都会进入开关的“默认”部分。为什么会发生在我身上?然后我只按“enter”,然后再按“t”,它又开始工作了。

如您所见,在我输入“18”后,我按了回车键。系统会显示温度将设置为18,继电器打开。如果我想关闭应用程序,我应该按“q”,或者我可以继续设置新的温度。无论我按什么,它都会显示:“Zly vstup. Stlacte tlacidlo 'i' pre viac informacii”,这是从开关的“默认”部分。我可以按任何东西,所有的时间这将显示,直到我按下“回车”,然后我可以输入“t”再次和它的工作。
为什么会这样?
代码如下:

#include <iostream>
#include <string>

using namespace std;

int input;
int temp = 20;
int oldTemp = 20;
string relay = "vypnute";

int main() {
    printf("Regulator teploty Turbo 3000 \nAktualna teplota: %d stupnov celzia, rele je %s. \nStlacte tladiclo 'i' pre informacie: ", temp, relay.c_str());
    while(input != 'q'){
        input = getchar();
        getchar();
        switch(input){
            case 'i': case 'i ':
                if(temp != 20){
                    relay = "zapnute";
                }
                printf("Aktualne je nastavena teplota na %d stupnov celzia, rele je %s. \n", temp, relay.c_str());
                printf(" i Info \n\ t Zadanie teploty od 10 do 35 stupnov \n\ + Zvysenie teploty o 1 stupen \n\ - Znizenie teploty o 1 stupen \n\ q Koniec programu \n");
                break;
            case 't': case 't ':
                printf("Zadajte pozadovanu teplotu: ");
                cin >> input;
                if(input > 35 || input < 10){
                  printf("Zadajte teplotu v rozmedzi od 10 do 35 stupnov. \nStlacte 't' pre zadanie novej teploty. ");
                  break;
                }
                if(input == temp){
                    relay = "vypnute";
                }
                else{
                    relay = "zapnute";
                }
                printf("Teplota bude nastavena z povodnych %d na pozadovanych %d stupnov, rele je %s.",temp, input, relay.c_str());
                temp = input;
                printf("\nAk chcete ukoncit regulator, stlacte 'q', inak pokracujte v nastavovani teploty. ");
                break;
            case '+': case '+ ':
                if(temp+1 > 35){
                    printf("Teplota nemoze byt vyssia ako 35 stupnov. ");
                    break;
                }
                relay = "zapnute";
                printf("Teplota bola zvysena z povodnych %d na pozadovanych %d stupnov, rele je %s. ",temp, temp+1, relay.c_str());
                temp++;
                printf("\nAk chcete ukoncit regulator, stlacte 'q', inak pokracujte v nastavovani teploty. ");
                break;
            case '-': case '- ':
                if(temp-1 < 10){
                    printf("Teplota nemoze byt mensia ako 10 stupnov. ");
                    break;
                }
                relay = "zapnute";
                printf("Teplota bola znizena z povodnych %d na pozadovanych %d stupnov, rele je %s. ",temp, temp-1, relay.c_str());
                temp--;
                printf("\nAk chcete ukoncit regulator, stlacte 'q', inak pokracujte v nastavovani teploty. ");
                break;
            case 'q': case 'q ':
                break;
            default:
                printf("Zly vstup. Stlacte tlacidlo 'i' pre viac informacii. ");
                break;
        }
    }
    if(temp == oldTemp){
        relay = "vypnute";
    }
    else{
        relay = "zapnute";
    }
    printf("Dakujeme za pouzivanie Regulatora Turbo 3000. \nTeplota je po novom nastavena na %d stupnov celzia a rele je %s. ", temp, relay.c_str());
    printf("Stlacte 'enter' pre ukoncenie aplikacie.");
    getchar();
    return 0;
}
qnyhuwrf

qnyhuwrf1#

感谢@π ντα,我能够解决我的问题.
下面是新的工作代码:

#include <iostream>

using namespace std;

int temp = 20;
int oldTemp = 20;
int min_temp = 10;
int max_temp = 35;
int temp_input;
char input;
string relay = "vypnute";

int main(int argc, const char * argv[]) {
    cout << "Regulator teploty Turbo 3000. \nAktualna teplota je nastavena na " << temp << " stupnov celzia, rele je " << relay << ".\nStlacte tlacidlo 'i' pre viac informacii.\nZadajte poziadavku: ";
    while(input != 'q'){
        cin >> input;
        cin.ignore();
        switch(input){
            case 'i':
                if(temp != oldTemp){
                    relay = "zapnute";
                }
                cout << "Aktualne je nastavena teplota na " << temp << " stupnov celzia, rele je " << relay << ".\n'i' -> Info \n't' -> Zadanie teploty \n'+' -> Zvysenie teploty o 1 stupen celzia \n'-' -> Znizenie teploty o jeden stupen celzia \n'q' -> Ukoncenie programu 'Regulator teploty Turbo 3000'\nZadajte poziadavku: ";
                break;
            case 't':
                cout << "Zadajte pozadovanu teplotu v rozmedzi od " << min_temp << " stupnov celzia do " << max_temp << " stupnov celzia.\nTeplota: ";
                cin >> temp_input;
                cin.ignore();
                if(temp_input > max_temp || temp_input < min_temp){
                    cout << "Zadali ste teplotu mimo povolenych hodnot. Zadajte hodnotu v rozmedzi od " << min_temp << " stupnov celzia do " << max_temp << " stupnov celzia.\n Teplota: ";
                }
                temp_input != temp ? relay = "zapnute" : relay = "vypnute";
                cout << "Teplota bude regulovana z povodnych " << temp << " stupnov celzia na pozadovanych " << temp_input << " stupnov celzia, rele je " << relay << ".\nZadajte poziadavku: ";
                temp = temp_input;
                break;
            case '+':
                if(temp + 1 > max_temp){
                    cout << "Teplota nemoze byt vyssia ako " << max_temp << " stupnov celzia.\nZadajte poziadavku: ";
                    break;
                }
                relay = "zapnute";
                cout << "Teplota bude regulovana z povodnych " << temp << " stupnov celzia na pozadovanych " << temp + 1 << " stupnov celzia, rele je " << relay << ".\nZadajte poziadavku: ";
                temp++;
                break;
            case '-':
                if(temp - 1 < min_temp){
                    cout << "Teplota nemoze byt nizsia ako " << min_temp << " stupnov celzia.\nZadajte poziadavku: ";
                    break;
                }
                relay = "zapnute";
                cout << "Teplota bude regulovana z povodnych " << temp << " stupnov celzia na pozadovanych " << temp - 1 << " stupnov celzia, rele je " << relay << ".\nZadajte poziadavku: ";
                temp--;
                break;
            default:
                cout << "Neznama poziadavka. Zadajte 'i' pre viac informacii.\nZadajte poziadavku: ";
        }
    }
    oldTemp == temp ? relay = "vypnute" : relay = "zapnute";
    cout << "Dakujeme za pouzivanie programu Regulator Turbo 3000.\nTeplota je nastavena na " << temp << " stupnov celzia, rele je " << relay << ".\nStlacte 'enter' pre ukoncenie aplikacie.\n";
    cin.get();
    return 0;
}

相关问题