Problem, program nie wykonuje poleceń po if c++

Piszę sobie program, który ma przeliczać jednostki. na razie mam tylko jednostki długości, ale program nie reaguje na polecenia po drugim if i się kończy.

#include

using namespace std;

int odp1, odp2, ile; string milimetry, centymetry, decymetry, metry, kilometry, mile, milimetry2, centymetry2, decymetry2, metry2, kilometry2, mile2;

int main()
{
cout << "Witaj! Co dzis przeliczamy? " << endl;

cout <<endl <<"[1] milimetry" <<endl;
cout <<"[2] centymetry" <<endl;
cout <<"[3] decymetry" <<endl;
cout <<"[4] metry" <<endl;
cout <<"[5] kilometry" <<endl;
cout <<"[6] mile" <<endl <<" ";

cin >> odp1;

if ((odp1>=7) || (odp1<=0))

{
cout <<“Nieprawidlowa cyfra”;
}

else if (odp1==1)
{
    odp1=milimetry;
}

else if (odp1==2)
{
    odp1=centymetry;
}

else if (odp1==3)
{
    odp1=decymetry;
}

else if (odp1==4)
{
    odp1=metry;
}

else if (odp1==5)
{
    odp1=kilometry;
}

else if (odp1==6)
{
    odp1=mile;
}

cout <<endl <<"Na co przeliczamy?" <<endl <<" ";

cout <<endl <<"[1] milimetry" <<endl;
cout <<"[2] centymetry" <<endl;
cout <<"[3] decymetry" <<endl;
cout <<"[4] metry" <<endl;
cout <<"[5] kilometry" <<endl;
cout <<"[6] mile" <<endl <<" ";

cin >> odp2;

if ((odp2>=7) || (odp2<=0))
{
cout <<“Nieprawidlowa cyfra”;

}
else if (odp2==1)
{
odp2=milimetry;
}

else if (odp2==2)
{
    odp2=centymetry;
}

else if (odp2==3)
{
    odp2=decymetry;
}

else if (odp2==4)
{
    odp2=metry;
}

else if (odp2==5)
{
    odp2=kilometry;
}

else if (odp2==6)
{
    odp2=mile;
}


cout <<"Ile chcesz przeliczyć " <<odp1 <<"?;
cin>> ile;




system(stop)

return 0;

}#include

using namespace std;

int odp1, odp2, ile; string milimetry, centymetry, decymetry, metry, kilometry, mile, milimetry2, centymetry2, decymetry2, metry2, kilometry2, mile2;

int main()
{
cout << "Witaj! Co dzis przeliczamy? " << endl;

cout <<endl <<"[1] milimetry" <<endl;
cout <<"[2] centymetry" <<endl;
cout <<"[3] decymetry" <<endl;
cout <<"[4] metry" <<endl;
cout <<"[5] kilometry" <<endl;
cout <<"[6] mile" <<endl <<" ";

cin >> odp1;

if ((odp1>=7) || (odp1<=0))

{
cout <<“Nieprawidlowa cyfra”;
}

else if (odp1==1)
{
    odp1=milimetry;
}

else if (odp1==2)
{
    odp1=centymetry;
}

else if (odp1==3)
{
    odp1=decymetry;
}

else if (odp1==4)
{
    odp1=metry;
}

else if (odp1==5)
{
    odp1=kilometry;
}

else if (odp1==6)
{
    odp1=mile;
}

cout <<endl <<"Na co przeliczamy?" <<endl <<" ";

cout <<endl <<"[1] milimetry" <<endl;
cout <<"[2] centymetry" <<endl;
cout <<"[3] decymetry" <<endl;
cout <<"[4] metry" <<endl;
cout <<"[5] kilometry" <<endl;
cout <<"[6] mile" <<endl <<" ";

cin >> odp2;

if ((odp2>=7) || (odp2<=0))
{
cout <<“Nieprawidlowa cyfra”;

}
else if (odp2==1)
{
odp2=milimetry;
}

else if (odp2==2)
{
    odp2=centymetry;
}

else if (odp2==3)
{
    odp2=decymetry;
}

else if (odp2==4)
{
    odp2=metry;
}

else if (odp2==5)
{
    odp2=kilometry;
}

else if (odp2==6)
{
    odp2=mile;
}


cout <<"Ile chcesz przeliczyć " <<odp1 <<"?;
cin>> ile;




system(stop)

return 0;

}

W 2 if powpisywałem jak było np. metry to poprawiłem na metry2 itp.
nadal nie działa

Ja ekspertem nie jestem i do tego od dawna w C++ nie pisałem ale może ostatnie else powinno być bez if? Nie jestem pewien czy to coś zmieni ale ogólnie możesz spróbować użyć:

if (odp2==1)
{
odp2=milimetry;
}

else if (odp2==2)
{
    odp2=centymetry;
}

else if (odp2==3)
{
    odp2=decymetry;
}

else if (odp2==4)
{
    odp2=metry;
}

else if (odp2==5)
{
    odp2=kilometry;
}

else if (odp2==6)
{
    odp2=mile;
}

else
{
cout <<“Nieprawidlowa cyfra”;

}

Wydaje mi się, że w C++ (wzorem innych języków) istnieje specjalna konstrukcja do takich “menu” tzn. switch - case. Strasznie komplikujesz sobie życie korzystając z if … else if.

Ale przecież ten program w ogóle się nie skompiluje. Każda instrukcja odp1=metry; odp1=kilometry; i tak dalej wygeneruje błąd, bo zmienna odp1 to INT, a metry, kilometry itd to STRINGI. Nie da się zrobić przypisania wartości STRING do INT.

Ten problem z głowy, ale jest następny. Jak mogę zamienić 1 mm na 0.00… mili według tego kodu``???

#include
#include <stdio.h>
#include
#include
#include <windows.h>
#include <stdlib.h>

using namespace std;

int odp1, odp2; string milimetry, centymetry, decymetry, metry, kilometry, mile, milimetry2, centymetry2, decymetry2, metry2, kilometry2, mile2; long double ile;

int main()
{
cout << "Witaj! Co dzis przeliczamy? " << endl;

cout <<endl <<"[1] milimetry" <<endl;
cout <<"[2] centymetry" <<endl;
cout <<"[3] decymetry" <<endl;
cout <<"[4] metry" <<endl;
cout <<"[5] kilometry" <<endl;
cout <<"[6] mile" <<endl <<" ";

cin >> odp1;

{
if ((odp1>=7) || (odp1<=0))
{
cout <<“Nieprawidlowa cyfra”;
exit;
}

else if (odp1==1)
{
    milimetry = to_string(odp1);
}

else if (odp1==2)
{
    centymetry = to_string(odp1);
}

else if (odp1==3)
{
    decymetry = to_string(odp1);
}

else if (odp1==4)
{
    metry = to_string(odp1);
}

else if (odp1==5)
{
    kilometry = to_string(odp1);
}

else if (odp1==6)
{
    mile = to_string(odp1);
}

}

cout <<endl <<"Na co przeliczamy?" <<endl <<" ";

cout <<endl <<"[1] milimetry" <<endl;
cout <<"[2] centymetry" <<endl;
cout <<"[3] decymetry" <<endl;
cout <<"[4] metry" <<endl;
cout <<"[5] kilometry" <<endl;
cout <<"[6] mile" <<endl <<" ";

cin >> odp2;

{
if ((odp2>=7) || (odp2<=0))
{
cout <<“Nieprawidlowa cyfra”<<endl;

}
else if (odp2==1)
{
milimetry2 = to_string(odp2);
}

else if (odp2==2)
{
    centymetry2 = to_string(odp2);
}

else if (odp2==3)
{
    decymetry2 = to_string(odp2);
}

else if (odp2==4)
{
    metry2 = to_string(odp2);
}

else if (odp2==5)
{
    kilometry2 = to_string(odp2);
}

else if (odp2==6)
{
    mile2 = to_string(odp2);
}

}

cout <<"Ile chcesz przeliczyc"<<"?" <<endl;
cin>> ile;

if((odp1==1) && (odp2==1))
{
    cout <<"Przeliczam..."<<endl;
    Sleep(1500);
    ile=ile;
    cout <<ile;
}

if((odp1==1) && (odp2==2))
{
    cout <<"Przeliczam..."<<endl;
    Sleep(1500);
    ile=(ile*0,1);
    cout <<ile;
}


else if((odp1==1) && (odp2==3))
{
    cout <<"Przeliczam..."<<endl;
    Sleep(1500);
    ile=(ile*0,01);
    cout <<ile;
}
else if((odp1==1) && (odp2==4))
{
    cout <<"Przeliczam..."<<endl;
    Sleep(1500);
    ile=(ile*0,001);
    cout <<ile;
}
else if((odp1==1) && (odp2==5))
{
    cout <<"Przeliczam..."<<endl;
    Sleep(1500);
    ile=(ile*0,000001);
    cout <<ile;
}
if((odp1==1) && (odp2==6))
{
    cout <<"Przeliczam..."<<endl;
    Sleep(1500);
    ile=(ile);
    cout <<ile;
}












return 0;

}

Wklejaj może kod do https://pastebin.com/ i potem link na forum, bo coś tu się formatowanie Twojego kodu rozlatuje. Trudno się czyta, mniej osób chętnych pomóc.

Wartości ułamkowe oddzielamy symbolem kropki (jak w angielskim), bo przecinek to w C++ osobny operator. Czyli żeby zamienić milimetry na centrymetry to mnożysz razy 0.1, a nie 0,1.

1 polubienie

ITS WORKING! Dzieki wielkie!