1

簡単な質問:なぜこのwhileループは入力を待たないのですか?(ingは文字列です)

while(ing != "0")

{
    cout << "Ingredient name: ";
    cin >> ing;
    for(int i = 0; i < ing.length(); i++)
    {
        if(ing[i] == ' ')
        ing[i] = '#';
    }
    fil << ing << ':';
    cout << "Quantity: ";
    cin >> quant;
    fil << quant << ':';
}

「材料名:数量:材料名:数量:...」などをスパムするだけです。

4

2 に答える 2

3

何であるかわからないfil

あなたの問題はcin.ignore()、ループの下部にあるaでストリームをフラッシュする必要があることだと思います(またはcin.getline()、入力を取得するためにaを実行します)。それ以外の場合、入力の最後の改行(Enterキーを押して入力を送信したとき)は、次の入力のために保存されcinますcin >> ing。したがって、改行はそこで使用され、実際にはユーザーに新しい入力を要求しません。

于 2012-05-11T21:48:45.953 に答える
0

このコードを試してみましたが、問題はありません(Visual Studio2008)。あなたのコードをもっと投稿させてください、そして私は助けるために最善を尽くします。

// CinProblem.cpp : Defines the entry point for the console application.
//

#include <stdio.h>
#include <tchar.h>
#include <string>
#include <sstream>
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    string ing;
    stringstream fil;
    int quant = 0;

    while(ing != "0")
    {
        cout << "Ingredient name: ";
        cin >> ing;
        for(int i = 0; 
            i < (int)ing.length(); 
            i++)
        {
            if(ing[i] == ' ')
            ing[i] = '#';
        }
        fil << ing << ':';
        cout << "Quantity: ";
        cin >> quant;
        fil << quant << ':';
    }

    system("pause");

    return 0;
}
于 2012-05-11T23:59:36.700 に答える