繁体   English   中英

C++ 中的输入浮点数?

[英]input float in C++?

我编写了一个程序来计算所有可能性,但是使用整数,现在我必须对浮点数进行计算,如何将程序更改为输入浮点数而不是整数? 这只是一部分,但如果我可以为第一个开关做到这一点,我可以为所有人做到:

#include <fstream>
using namespace std;
ifstream in("multimi.in");
ofstream out("produs.out");
void input(int *v)
{
    for(int i=1; i<=2; i++)
        in>>v[i];
}

int main()
{
    float a[3],b[3],c[3],d[3],e[3],s[3];
    int num_tot;
    in>>num_tot;
    switch(num_tot)
    {
        case 2:
        input(a);
        input(b);

        for(int i=1; i<=2; i++)
            for(int j=1; j<=2; j++)

                    out<<a[i]<<","<<b[j]<<endl;
        break;

这是使用 int 的代码:

#include <fstream>

using namespace std;
ifstream in("multimi.in");
ofstream out("produs.out");
void input(int *v)
{
    for(int i=1; i<=2; i++)
        in>>v[i];
}

int main()
{
    int a[3],b[3],c[3],d[3],e[3],s[3];
    int num_tot;
    in>>num_tot;
    switch(num_tot)
    {
        case 2:
        input(a);
        input(b);

        for(int i=1; i<=2; i++)
            for(int j=1; j<=2; j++)

                    out<<a[i]<<","<<b[j]<<endl;
        break;

如果要解析input function 中的float值,则必须有一个兼容的参数,因为您将浮点数组作为参数传递(它成为指向数组第一个元素的指针),您将需要一个指向float而不是指向int的指针。

void input(float *v){ ... }

我还应该注意,您正在绕过数组中的第一个元素,索引从[0]开始。

我要做的另一件事是避免使用全局变量,如果你想in function 中使用你的 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 你可以通过引用将它作为 ZC1C425268E68385D1AB5074C17A94 的参数传递给 ZC1C425268E68385D1AB5074C17A94

所有的事情都考虑到你会有这样的事情:

void input(float *v, ifstream& in)
{
    for (int i = 0; i < 2; i++)
        in >> v[i];
}
int main()
{
    ifstream in("test.txt");
    ofstream out("produs.out");
    float a[2], b[2];
    int num_tot;

    if (in.is_open() && out.is_open()) //it's important to check for successful file opening
    {
        in >> num_tot;

        switch (num_tot)
        {
        case 2:
            input(a, in);
            input(b, in);
            for (int i = 0; i < 2; i++)
            {
                out << a[i] << ", " << b[i] << endl;
            }
            break;
        }
    }
}

如果你想要一些适用于intfloat的东西,你可以制作一个 function 可以使用模板同时采用这两种类型,我承认现在这可能太多了,但是当你对语:

template<typename T> void input(T& v, ifstream& in)
{
    for (int i = 0; i < 2; i++)
        in >> v[i];
}

这里T可以同时采用intfloat ,另外一个优点是它也可以通过引用传递。 当然,如果您愿意,您仍然可以使用指针,但通过引用传递更可取,因为它更安全。


脚注

考虑不使用using namespace std; 您可以点击此链接了解其原因、何时可以安全使用以及替代方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM