虽然循环不等待 CIN

while loop that doesn't wait for cin

本文关键字:等待 CIN 循环      更新时间:2023-10-16

快速问题:为什么这个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 << ':';
}
它只是垃圾邮件"成分名称:数量:

成分名称:数量:..."等等

不确定fil是什么。

我认为您的问题是您需要在循环底部使用cin.ignore()刷新流(或者执行cin.getline()以获取输入)。否则,输入末尾的换行符(当您按 Enter 提交输入时)将保存为下一个cin即您的cin >> ing。因此,换行符在那里用完了,实际上并没有要求用户输入新输入。

我刚刚尝试了这段代码,我没有问题(Visual Studio 2008)。请让我们发布更多您的代码,我会尽力提供帮助。

// 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;
}