c++ - 查找新行字符 C++

标签 c++ calculator

我正在制作一个计算器,如果它找到字符打印,它会返回结果。但是如果用户输入没有任何反应,所以我想添加到这个函数(下面),如果它找到新的行字符,它将返回 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/

相关文章:

c++ - 检查一组类型是否是具有组合的子集

c++ - 当 C++11 应用程序使用非 C++11 库时返回值损坏

c++ - 将 std::tr1::shared_ptr 与 std::function/std::bind 混合会导致较新的 gcc 出现编译器错误

ios - 计算器小数点

c++ - 矩阵 - 从文件中读取

c++ - GIF LZW解压

javascript - 为什么变量在 Javascript 函数之前声明

swift - Swift 中除以 0 时捕获错误

c++ - 我的计算器有问题

c - 为什么 odd * even 在 C 中不返回精确值?