1

我需要绝望的帮助,因为我不知道为什么以及我做错了什么。我试图向用户询问有关长度转换的多个问题。我遇到一个问题,只问第一个问题,而下一个问题将没有机会被问到。我尝试了两个版本,但它们都有缺陷。

样本输出:

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();

}
4

3 回答 3

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.修正你的缩进,因为它使这样的错误更容易被发现。

于 2013-01-31T19:18:28.290 回答
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)代码可能存在逻辑缺陷,但这与您的问题无关。

于 2013-01-31T19:19:52.297 回答
0

很难说这个缩进是怎么回事,但你的意思是在 if() 块中包含 getline 吗?也许你错过了{}

 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);
于 2013-01-31T19:09:11.240 回答