这是一个非常简单的问题,一直困扰着我。在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;
如果我这样做,它会读取循环中的所有字符。如果我在它下面添加另一条打印行,它就不会读取任何内容。
答案 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;
}