2014-10-17 50 views
0

这是一个非常简单的问题,一直困扰我很多。在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; 
} 

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

但是,如果我不把进入利率线然后开始读书再次平稳,象下面这样:

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

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

+1

鸵鸟政策做奇怪的事情,并使用函数getline(并得到非常非常糟糕,因为你不容防止用户破您的程序) – deviantfan 2014-10-17 02:18:24

+0

您不能混用cstdio和iostream函数,因为两者都使用单独的缓冲区。 – kay 2014-10-17 02:22:18

回答

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