繁体   English   中英

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

[英]Why I need to enter empty char to be able to continue with my console app in c++?

我是 c++ 的新手,我正在为学校做小型控制台项目。 我创建了类似 Thermostat 的东西。 当您运行该应用程序时,它会要求用户输入。

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

一切都对我有用,我可以按“i”,我可以按 +/-,一切正常。 但是当我按下“”,输入一些温度并确认时,我会收到正确的回复。 但是现在,无论我按下什么,它都会进入开关的“默认”部分。 为什么这会发生在我身上? 然后我只按“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;
}

感谢@πìντα ῥεῖ,我能够解决我的问题。

这是新的工作代码:

#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;
}


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM