Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Програма не работает коректно (http://forum.oszone.net/showthread.php?t=253008)

COM-BAT 02-02-2013 17:09 2080966

Програма не работает коректно
 
Решил для себя написать простенькую програму которая могла б переводить кило байты в байты и тд и тп. В целом она должна была работать с b, B, Kb, KB, Mb, MB, Gb, GB, Tb, TB, Pb, PB, Eb,EB. Написал но програма не хочет работать с всем что выше Gb. Вот код:
Код:

#include <iostream>
#include <string>
using namespace std;

int main()
{
        const int mk=1024;
        const int mb=8;
        int fin;
        bool eror=false;
        string ft;
        string st;
        int ofin;
        int out;
        char yn;
        end:

        cin>>fin>>ft>>st;

        if((ft=="b")||(ft=="B")||(ft=="Kb")||(ft=="KB")||(ft=="Mb")||(ft=="MB")||(ft=="Gb")||(ft=="GB")||(ft=="Tb")||(ft=="TB")||(ft=="Pb")||(ft=="PB")||(ft=="Eb")||(ft=="EB"))
        {
        if(ft=="b") {ofin=fin;};
        if(ft=="B") {ofin=fin*mb;};
        if(ft=="Kb"){ofin=fin*mk;};
        if(ft=="kB"){ofin=fin*mk*mb;};
        if(ft=="Mb"){ofin=fin*mk*mk;};
        if(ft=="MB"){ofin=fin*mk*mk*mb;};
        if(ft=="Gb"){ofin=fin*mk*mk*mk;};
        if(ft=="GB"){ofin=fin*mk*mk*mk*mb;};
        if(ft=="Tb"){ofin=fin*mk*mk*mk*mk;};
        if(ft=="TB"){ofin=fin*mk*mk*mk*mk*mb;};
        if(ft=="Pb"){ofin=fin*mk*mk*mk*mk*mk;};
        if(ft=="PB"){ofin=fin*mk*mk*mk*mk*mk*mb;};
        if(ft=="Eb"){ofin=fin*mk*mk*mk*mk*mk*mk;};
        if(ft=="EB"){ofin=fin*mk*mk*mk*mk*mk*mk*mb;};
        //--------------------------------------------------------
                if((st=="b")||(st=="B")||(st=="Kb")||(st=="KB")||(st=="Mb")||(st=="MB")||(st=="Gb")||(st=="GB")||(st=="Tb")||(st=="TB")||(st=="Pb")||(st=="PB")||(st=="Eb")||(st=="EB"))
                {
                if(st=="b") {out=ofin;};
                if(st=="B") {out=ofin/mb;};
                if(st=="Kb"){out=ofin/mk;};
                if(st=="KB"){out=(ofin/mk)/mb;};
                if(st=="Mb"){out=(ofin/mk)/mk;};
                if(st=="MB"){out=ofin/mk/mk/mb;};
                if(st=="Gb"){out=ofin/mk/mk/mk;};
                if(st=="GB"){out=(ofin/mk/mk/mk)/mb;};
                if(st=="Tb"){out=ofin/mk/mk/mk/mk;};
                if(st=="TB"){out=ofin/mk/mk/mk/mk/mb;};
                if(st=="Pb"){out=ofin/mk/mk/mk/mk/mk;};
                if(st=="PB"){out=ofin/mk/mk/mk/mk/mk/mb;};
                if(st=="Eb"){out=ofin/mk/mk/mk/mk/mk/mk;};
                if(st=="EB"){out=ofin/mk/mk/mk/mk/mk/mk/mb;};
                }
                else{
                        cout<<"Eror2!"<<endl;
                        goto end;
                }
        //--------------------------------------------------------
        }
        else{
                cout<<"Eror1!"<<endl;
                goto end;
        }
        cout<<fin<<ft<<"="<<out<<st<<endl;
        goto end;
        system("pause");


LilLoco 02-02-2013 17:50 2081009

Цитата:

Цитата COM-BAT
не хочет работать с всем что выше Gb »

Что значит не хочет работать? Ошибки?

На вскидку, в Int (32) идет переполнение. Попробуйте использовать тип long long

COM-BAT 02-02-2013 18:54 2081061

LilLoco,
спасибо інта не хватало


Время: 05:42.

Время: 05:42.
© OSzone.net 2001-