我正在制作一个计算器,如果它找到字符打印,它会返回结果。但是如果用户输入没有任何反应,所以我想添加到这个函数(下面),如果它找到新的行字符,它将返回 token 打印。
char ch;
cin >> ch;
switch (ch) {
case '\n': // i made this but it s not working
return Token(print); //
case print:
case ',':
case '!':
case '(':
case ')':
case '+':
case '-':
case '*':
case '/':
case '%':
case '=':
return Token(ch);
case '.':
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
{
cin.putback(ch);
double val;
cin >> val;
return Token(number, val);
}
default:
if (isalpha(ch)) {
string s;
s += ch;
while (cin.get(ch) && (isalpha(ch) || isdigit(ch) || ch == '_')) s += ch;
cin.putback(ch);
if (s == declkeyz) return Token(zmienna);
if (s == declkeyc) return Token(stala);
if (s == pierw) return Token(pier);
if (s == poteg) return Token(pot);
if (s == kon) return Token(quit);
return Token(name, s);
}
}
最佳答案
这是因为输入运算符>>>
默认跳过空格。
使用std::noskipws
输入操纵器来改变行为。
编辑
解决 OP 关于 isspace()
的评论,他们可以这样做:
cin >> noskipws >> ch
if (isspace(ch)) {
// handle white space case
}
switch(ch)
...
关于c++ - 查找新行字符 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27722353/