嘿伙计,所以我的程序如下,但是当我输入一个以w,d,b或q开头的单词时,例如存款而不是字母d,程序只是不断重复“你愿意”的初始问题吗?提款,存款等。“我试图转换cin>> getline(cin,user_request),但这给了我一个错误。我很确定解决这个问题的方法是将cin转换为getline,但我不确定如何正确。如果有人可以帮忙。有没有办法用cin语句执行此程序? :
#include <iostream>
#include <string>
using namespace std;
int main ()
{
char user_request;
string user_string;
double account_balance, dollars_withdraw, dollars_deposit;
account_balance = 5000;
user_request= user_string[0];
while(account_balance =>0)
{
cout << "Would you like to Withdraw, Deposit, Check your balance or Quit?"
<< endl;
cin >> user_request;
if (user_request == 'w' || user_request== 'W')
{
cout << "How much would you like to withdraw?" << endl;
cin >> dollars_withdraw;
if (dollars_withdraw > account_balance)
cout << "Invalid transaction" << endl;
else
account_balance = account_balance - dollars_withdraw;
cout << "Your new balance is $" << account_balance << endl;
}
if (user_request == 'd' || user_request== 'D')
{
cout << "How much would you like to deposit?" << endl;
cin >> dollars_deposit;
account_balance= account_balance + dollars_deposit;
cout << "Your new balance is $" << account_balance << endl;
}
if (user_request == 'b' || user_request == 'B')
{
account_balance= account_balance;
cout << "Your available balance is $" << account_balance << endl;
}
if (user_request == 'q' || user_request == 'Q')
break;
}
cout << "Goodbye" << endl;
return 0;
}
答案 0 :(得分:4)
虽然user_request
是char
,但输入中的每个非空格字符都会满足另一个cin >> user_request;
语句,因此输入“deposit”将循环7次,只有'd'匹配if
语句,但每次都会打印提示信息。
您应该将user_request
更改为std::string
,然后getline(cin, user_request)
将工作,但您需要比较user_request
的第一个字符(即[0]
)到例如"w"
(字符串文字)而不是'w'
(字符文字)。
检查输入请求是否有效也是一种好习惯 - 文件结束条件会导致循环永远“旋转”。
更改提示符也是一个好主意,因此它会提到您希望键入的字母,否则他们可能会输入例如“c”而不是“b”代表“支票余额”。只需cout
类似:
Would you like to [W]ithdraw, [D]eposit, Check your [b]alance or [Q]uit?
所以,全部:
std::string user_request;
if (not getline(cin, user_request)) // or !getline(...) if your compiler lacks "not"
break;
if (user_request.empty())
continue; // avoid [0] on an empty line, which may crash the program
if (user_request[0] == "w" || user_request[0] == "W")
...
答案 1 :(得分:2)
从标准中取std::string
,输入一个单词(由空格分隔)
std::string input;
if( std::cin >> input ) {
if( ! input.empty() && input[0] == 'd' || input[0] == 'D' )
// ...
}
或使用std::getline()
:
std::string line;
if( std::getline(std::cin, line) ) {
if( ! line.empty() && line[0] == 'd' || line[0] == 'D' )
// ...
}
当然,如果用户输入多个单词,则从std::string
获取std::cin
,那么您就会遇到与您在问题中提到的多个字符相同的“问题”
答案 2 :(得分:1)
如上所述,cin
>>
有点挑剔,如果尝试读取错误类型的值,则会进入“失败状态”。实际上还有许多其他失败模式,因此从控制台读取输入的首选方法是使用getline
和stringstreams
的某种组合。如果您有兴趣,可以在线获得斯坦福大学的入门C ++编程课程has an entire chapter on how to do this,该课程涵盖从cout
和文件I / O的基础到如何从控制台正确安全地获取数据的所有内容。
希望这有帮助!
答案 3 :(得分:1)
当你使用声明变量字符串时,那么
getline (cin,user_guest); //This is correct.
但是当你使用变量char时,那是另一个问题。您的getline
将不适用。试着用这个:
char user_guest;
cin.get(user_request);
答案 4 :(得分:0)
答案 5 :(得分:0)
是std :: getline,获取输入流,以及std :: string或char *
您正在尝试传入一个字符,这就是您收到错误的原因。
FWIW,你可以使用带有std :: string的getline()。
答案 6 :(得分:0)
我会尝试替换
cin >> user_request;
与
cin >> user_string;
user_request= user_string[0];