我需要绝望的帮助,因为我无法弄清楚为什么以及我做错了什么。我试图向用户询问有关长度转换的多个问题。我遇到一个问题,只问第一个问题,下一个问题没有机会被问到。我试过两个版本,但它们都有缺陷。
Sisestage pikkus meetrides:
500
Sisestage uue uhiku kood (alj, ver, kyn, toll, jalg, jard, lii):
Sisestasite vale vaartuse:500 void vale uhiku:
我的代码:
#include <iostream>
#include <iomanip>
#include <string>
#include <string.h>
using namespace std;
int main()
{
float P; /* Pikkus meetrites */ /*Length P in metres*/
string U; /* M66du:hik*/ /* Unit of measure*/
float ALJ;
float VER;
float KYN;
float TOLL;
float JALG;
float JARD;
float LII;
do
{
cout<<"Sisestage pikkus meetrides: \n"; /*Ku:sin kasutajalt pikkust P*/ /* Asking user for the length P in metres*/
cin>>P;
if (P > 0)
cout<<"Sisestage uue uhiku kood (alj, ver, kyn, toll, jalg, jard, lii): \n"; /* Ku:sin kasutajalt u:hiku koodi U*/ /* Asking user for the length U in metres*/
getline(cin, U);
} while (P > 0);
cout << "Sisestasite vale vaartuse:"<<P<< endl; /*Veateade*/
ALJ = P / 5572;
VER = P / 1066.781;
KYN = P / 0.53;
TOLL = P / 0.0254;
JALG = P / 0.3048;
JARD = P / 0.9144;
LII = P / 500;
if( U == "alj")
{
cout<< setprecision(2)<<fixed<< P <<"m = "<< ALJ << U <<"." ;
}
else if( U == "ver")
{
cout<< setprecision(2) << fixed << P <<" m ="<< VER << U <<".";
}
else if( U == "kyn")
{
cout<< setprecision(2) << fixed << P <<" m ="<< KYN << U <<".";
}
else if( U == "toll")
{
cout<< setprecision(2) << fixed << P <<" m ="<< TOLL << U <<".";
}
else if( U == "jalg")
{
cout<< setprecision(2) << fixed << P<<" m ="<< JALG << U <<".";
}
else if( U == "jard")
{
cout<< setprecision(2) << fixed << P <<" m ="<< JARD << U <<".";
}
else if( U == "lii")
{
cout<< setprecision(2) << fixed << P <<" m ="<< LII << U <<".";
}
getchar();
getchar();
}
答案 0 :(得分:0)
很难说这个缩进是怎么回事,但是你的意思是将getline包含在if()块中吗?也许你错过了{}
if (P > 0)
cout<<"Sisestage uue uhiku kood (alj, ver, kyn, toll, jalg, jard, lii): \n"; /* Ku:sin kasutajalt u:hiku koodi U*/ /* Asking user for the length U in metres*/
getline(cin, U);
答案 1 :(得分:0)
1.您在验证线上没有任何开口{
并关闭}
:
if (P > 0)
cout<<"Sisestage uue uhiku kood (alj, ver, kyn, toll, jalg, jard, lii): \n"; /* Ku:sin kasutajalt u:hiku koodi U*/ /* Asking user for the length U in metres*/
getline(cin, U);
2.修复你的缩进,因为它会让这样的错误更容易被发现。
答案 2 :(得分:0)
很难将operator<<
与std::getline
混在一起。前者在输入流中留下行尾字符,这会混淆后者。
致电operator<<
后,您必须使用该行的剩余部分。这有两种方式:
// throw away rest of line
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
或
std::string temp;
std::getline(cin, temp); // throw away rest of line
试试这个:
do
{
cout<<"Sisestage pikkus meetrides: \n"; /*Ku:sin kasutajalt pikkust P*/ /* Asking user for the length P in metres*/
cin>>P;
std::getline(cin, U); // throw away rest of line
if (P > 0)
cout<<"Sisestage uue uhiku kood (alj, ver, kyn, toll, jalg, jard, lii): \n"; /* Ku:sin kasutajalt u:hiku koodi U*/ /* Asking user for the length U in metres*/
getline(cin, U); // Start on fresh line
} while (P > 0);
正如其他人所指出的,if(P>0)
代码中可能存在逻辑缺陷,但这与您的问题无关。