无法在循环中读取字符串/字符串

时间:2014-10-17 01:48:58

标签: c++

这是一个非常简单的问题,一直困扰着我。在while循环中从一行中读取一个字符时,它不会再次读取。如果我使用cin>>name它工作正常,但我需要在字符之间留出空格。使用String类的相同问题。

int main()
{
    int i=0;
    int intRate;
    char name[20];
    while(i!=3){
        cout<<"Enter name";
        gets(name);

        cout<<"Enter Interest Rate: ";
        cin>>intRate;

        i++;
        cout<<endl;
    }
    cout<<"name is : "<<name<<endl;
    cout<<"Interest Rate is: " <<intRate;
}

所以,当我尝试在循环中输入字符“gets(name)”时,第一次接受该字符然后我也可以输入intRate,但下次遇到循环时i=1我无法为name键入任何内容,或者它不会读取任何字符行,而是打印Enter Interest Rate并在以下循环中读取intRate

但如果我没有输入利率线,那么它会再次顺利开始阅读,如下所示:

char name[20];
while(i!=3){
    cout<<"Enter name";
    i++;
    cout<<endl;

如果我这样做,它会读取循环中的所有字符。如果我在它下面添加另一条打印行,它就不会读取任何内容。

1 个答案:

答案 0 :(得分:1)

当你混合C和C ++输入并且不注意他们实际做的事情时会发生这种情况。

请改为尝试:

int main()
{
    int i = 0;
    int intRate = 0;
    string name;
    while (i != 3)
    {
        cout << "Enter name: ";
        getline(cin, name);

        cout << "Enter Interest Rate: ";
        cin >> intRate;
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');

        i++;
        cout << endl;
    }

    cout << "Name is : " << name << endl;
    cout << "Interest Rate is: " << intRate;

    return 0;
}

或者这个:

int main()
{
    int i = 0;
    int intRate = 0;
    string name, line;
    while (i != 3)
    {
        cout << "Enter name: ";
        getline(cin, name);

        cout << "Enter Interest Rate: ";
        getline(cin, line);

        stringstream ss(line);
        ss >> intRate;

        i++;
        cout << endl;
    }

    cout << "Name is : " << name << endl;
    cout << "Interest Rate is: " << intRate;

    return 0;
}