我为一个班级制作了一个小型的桌面成本计划。我想在其中加入一个循环。但每次我到达程序结束并将其循环回到开头时,它会跳过我要求客户名称的部分并将其留空。知道怎么解决吗?
这是我的代码:
#include <iostream> // needed for Cin and Cout
#include <string> // needed for the String class
#include <math.h> // math functions
#include <stdlib.h>
using namespace std;
#define baseCost 200.00
#define drawerPrice 30.00
int main(void)
{
while(true)
{
string cname;
char ch;
cout << "What is your name?\n";
getline(cin, cname);
cout << cname;
cout << "\nWould you like to do another? (y/n)\n";
cin >> ch;
if (ch == 'y' || ch == 'Y')
continue;
else
exit(1);
}
return 0;
}
答案 0 :(得分:0)
问题是你需要在提示退出后调用cin.ignore()。当您使用cin获取'ch'变量时,换行符仍然存储在输入缓冲区中。调用cin.ignore(),忽略该字符。
如果不这样做,您会注意到程序会在第二个循环中打印换行符作为名称。
您还可以将'ch'变量设为'cname'之类的字符串,并使用getline而不是cin。然后你不必发出cin.ignore()调用。
#include <iostream> // needed for Cin and Cout
#include <string> // needed for the String class
#include <math.h> // math functions
#include <stdlib.h>
using namespace std;
#define baseCost 200.00
#define drawerPrice 30.00
int main()
{
while(true)
{
string cname;
char ch;
cout << "What is your name?\n";
getline(cin, cname);
cout << cname;
cout << "\nWould you like to do another? (y/n)\n";
cin >> ch;
// Slightly cleaner
if (ch != 'y' && ch != 'Y')
exit(1);
cin.ignore();
/*
if (ch == 'y' || ch == 'Y')
continue;
else
exit(1);
*/
}
return 0;
}