[英]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.