c++ - 给定斜杠c++时分隔分母和分子输入

标签 c++ input istream fractions

我是 C++ 的新手,我想知道是否可以就我一直遇到的问题寻求帮助。我给定一个输入作为 A/B 类型的分数或整数值。我需要将 A 和 B 值分开,以便将它们放入 fracnum 和 fracdnum 变量中。当我给定一个整数值时,问题就来了。这是我的代码:

istream& operator >>(istream& in,  Fraction& frac){
    char slash = '/' ;
    int fracnum;
    int fracdnum;
    int peekchar;
in >>fracnum;
if(in >> slash){
    in >>fracdnum;
}
else{
    in.putback(slash);
    fracdnum = 1;
}

    frac = Fraction(fracnum, fracdnum);
    return in;
    }

我不知道如何拆分这两个分数以及如何处理整数。

编辑*****

我试过使用 scanf 方法,但它仍然无法正常工作,这是我的尝试,有人发现它有什么问题吗?

istream& operator >>(istream& in,  Fraction& frac){
int fracdnum;
int fracnum;
int num_read = scanf("%d/%d", &fracnum, &fracdnum);
if( num_read ==1){
    fracdnum=1;
Fraction(fracnum,fracdnum);
}
else if (num_read == 2){
    Fraction(fracnum,fracdnum);
}

    return in;
    }

这是我用于程序的测试文件:

    // Test input, exception and +=:
    Fraction sum(0);
    Fraction fin;
    cout << "\nSumming fractions. Enter fractions as \"1/2\" or just enter a single integer." << endl;
    cout << "Enter zero to end the summation:" << endl;
    do {
        cout << "Enter a fraction to add to sum: ";
        try {
            cin >> fin;
            sum += fin;
        } catch (FractionException &e) {
            cout << e.what() << endl;
        }
    } while (fin != 0);
    cout << "Sum is: " << sum << endl;


    return 0;

} // end main

最佳答案

老实说,在这种情况下 scanf 更简单:

int num_read = scanf("%d/%d", &fracnum, &fracdnum);
if(num_read == 1) {
    // scanf read one number
    fracdnum = 1;
} else if(num_read == 2) {
    // scanf read two numbers
} else {
    // scanf read nothing: fail
}

关于c++ - 给定斜杠c++时分隔分母和分子输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28575950/

相关文章:

c++ - arduino 网络客户端随机卡住

c++ - 在 OpenGL 中渲染 .ply 文件

c++ - 调试 : Automatically check if (this==NULL)

c++ - 为什么std::getline()在格式化提取后会跳过输入?

c++ - 当我向 <vector> 添加对象时出现段错误

HTML &lt;input&gt; 大小属性不起作用?

javascript - 当我克隆文件输入时,克隆的输入不会保留上传的文件。原始输入确实

c - 如何在 C 中以已知格式逐行读取文件

c++ - 添加额外字符时 stringstream 的 putback 失败

c++ - istream 和 cin.get()