检查是否按下了一个字符
Checking if a char is pressed
程序应读取 2 个整数并根据从键盘输入的符号计算总和或乘积。如果您在任何给定时刻按 q,它必须退出。
#include "stdafx.h"
#include <iostream>
#include<conio.h>
using namespace std;
int main()
{
char k, l ='h',c;
int a,b,s, p;
aici: while (l != 'q')
{
cin >> a;
if (_kbhit() == 0) //getting out of the loop
{
c = a;
if (c == 'q')
{
l = 'q';
goto aici;
}
}
cin >> b;
if (_kbhit() == 0)
{
c = b;
if (c == 'q')
{
l = 'q';
goto aici;
}
}
k = _getch();
if (_kbhit() == 0)
{
c = k;
if (c == 'q')
{
l = 'q';
goto aici;
}
}
if (k == '+')
{
s =(int)(a + b);
cout << s;
}
if (k == '*')
{
p = (int)(a*b);
cout << p;
}
}
return 0;
}
它期望 a 和 b 都是整数,所以输入 'q' 会造成一团糟。
是否可以在不将 a 和 b 声明为字符的情况下使程序运行?
您不需要在 cin 中使用 goto 和 kbhit()。
一个简单的方法是:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a,b;
string A, B
char k;
while(1)
{
cin >> A;
if(A == "q") break;
cin >> B;
if(B == "q") break;
a = atoi(A.c_str());
b = atoi(B.c_str());
cin >> k;
if(k == 'q') break;
if (k == '+')
cout << (a + b);
if (k == '*')
cout << (a*b);
}
}
在这条路上你无法到达你想去的地方。标准输入流读取将阻塞,阻止您查找 'q' 并退出。
而是查看 'q' 的所有输入,并在收到完整消息后将其转换为您需要的值。类似于:
while (int input = _getch()) != 'q') // if read character not q
{
accumulate input into tokens
if enough complete tokens
convert numeric tokens into number with std::stoi or similar
perform operation
print output
}
您可以按照
的方式做一些事情
std::stringstream accumulator;
while (int input = _getch()) != 'q') // if read character not q
{
accumulator << std::static_cast<char>(input);
if (got enough complete tokens)// this be the hard part
{
int a;
int b;
char op;
if (accumulator >> a >> b >> op)
{ // read correct data
perform operation op on a and b
print output
}
accumulator.clear(); // clear any error conditions
accumulator.str(std::string()); // empty the accumulator
}
}
程序应读取 2 个整数并根据从键盘输入的符号计算总和或乘积。如果您在任何给定时刻按 q,它必须退出。
#include "stdafx.h"
#include <iostream>
#include<conio.h>
using namespace std;
int main()
{
char k, l ='h',c;
int a,b,s, p;
aici: while (l != 'q')
{
cin >> a;
if (_kbhit() == 0) //getting out of the loop
{
c = a;
if (c == 'q')
{
l = 'q';
goto aici;
}
}
cin >> b;
if (_kbhit() == 0)
{
c = b;
if (c == 'q')
{
l = 'q';
goto aici;
}
}
k = _getch();
if (_kbhit() == 0)
{
c = k;
if (c == 'q')
{
l = 'q';
goto aici;
}
}
if (k == '+')
{
s =(int)(a + b);
cout << s;
}
if (k == '*')
{
p = (int)(a*b);
cout << p;
}
}
return 0;
}
它期望 a 和 b 都是整数,所以输入 'q' 会造成一团糟。 是否可以在不将 a 和 b 声明为字符的情况下使程序运行?
您不需要在 cin 中使用 goto 和 kbhit()。 一个简单的方法是:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a,b;
string A, B
char k;
while(1)
{
cin >> A;
if(A == "q") break;
cin >> B;
if(B == "q") break;
a = atoi(A.c_str());
b = atoi(B.c_str());
cin >> k;
if(k == 'q') break;
if (k == '+')
cout << (a + b);
if (k == '*')
cout << (a*b);
}
}
在这条路上你无法到达你想去的地方。标准输入流读取将阻塞,阻止您查找 'q' 并退出。
而是查看 'q' 的所有输入,并在收到完整消息后将其转换为您需要的值。类似于:
while (int input = _getch()) != 'q') // if read character not q
{
accumulate input into tokens
if enough complete tokens
convert numeric tokens into number with std::stoi or similar
perform operation
print output
}
您可以按照
的方式做一些事情std::stringstream accumulator;
while (int input = _getch()) != 'q') // if read character not q
{
accumulator << std::static_cast<char>(input);
if (got enough complete tokens)// this be the hard part
{
int a;
int b;
char op;
if (accumulator >> a >> b >> op)
{ // read correct data
perform operation op on a and b
print output
}
accumulator.clear(); // clear any error conditions
accumulator.str(std::string()); // empty the accumulator
}
}