1

なぜ、何が間違っているのかわからないため、必死の助けが必要です。長さの変換についてユーザーに複数の質問をしようとしています。最初の質問しか出されず、次の質問が出されないという問題に遭遇しました。2 つのバージョンを試しましたが、どちらも問題がありました。

出力例:

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<<その行の残りを消費する必要があります。次の 2 つの方法があります。

 // 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 に答える