我很难调试长编译时间和多个用户输入要求

时间:2013-01-31 19:02:04

标签: c++

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

Sample output:

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

}

3 个答案:

答案 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)代码中可能存在逻辑缺陷,但这与您的问题无关。