C++ 使用getline代替cin>&燃气轮机;
嘿,伙计们,我的程序如下,但当我输入一个以w、d、b或q开头的单词时,比如存款而不是字母d,程序只是不断重复最初的问题“您想取款、存款等吗?”我试图将cin>>转换为getline(cin,用户请求),但这给了我一个错误。我很确定解决这个问题的方法是将cin转换为getline,但我不确定如何正确地进行转换。如果有人能帮忙的话。有没有办法用cin语句来完成这个程序C++ 使用getline代替cin>&燃气轮机;,c++,C++,嘿,伙计们,我的程序如下,但当我输入一个以w、d、b或q开头的单词时,比如存款而不是字母d,程序只是不断重复最初的问题“您想取款、存款等吗?”我试图将cin>>转换为getline(cin,用户请求),但这给了我一个错误。我很确定解决这个问题的方法是将cin转换为getline,但我不确定如何正确地进行转换。如果有人能帮忙的话。有没有办法用cin语句来完成这个程序 #include <iostream> #include <string> using namespace
#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;
}
#包括
#包括
使用名称空间std;
int main()
{
字符用户请求;
字符串用户_字符串;
双倍账户余额、美元取款、美元存款;
账户余额=5000;
用户请求=用户字符串[0];
而(账户余额=>0)
{
cout用户请求;
if(用户请求=='w'| |用户请求=='w')
{
不能提取美元;
如果(美元提取>账户余额)
cout您需要将字符串检索到缓冲区(而不是单个字符)
见:
虽然用户请求
是一个字符
,但输入中的每个非空格字符将满足另一个cin>
语句,因此输入“存款”将循环7次,只有“d”匹配if
语句,但每次都会打印提示消息
您应该将user\u request
更改为std::string
,然后getline(cin,user\u request)
将起作用,但您需要将user\u 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")
...
是std::getline,获取输入流和std::string或char*
您试图传入一个字符,这就是为什么会出现错误
FWIW,您可以将getline()与std::string一起使用。或者从标准中获取一个std::string
,它将输入一个单词(由空格分隔)
或者使用std::getline()
获取整行代码:
当然,在从std::cin
获取std::string
的情况下,如果用户输入了多个单词,那么您就会遇到与您在问题中提到的多个字符相同的“问题”。我会尝试替换
cin >> user_request;
与
如上所述,cin
在>
方面有点挑剔,会进入“失败状态”如果它试图读取一个错误类型的值,那么实际上还有很多其他的故障模式,因此从控制台读取输入的首选方法是使用<代码> GETLION>代码>和 StrugSuths/Cuff>。如果您感兴趣的话,斯坦福大学的入门级C++程序设计课程可以在网上进行。从cout
和文件I/O的基础知识到如何正确、安全地从控制台获取数据的所有内容
希望这有帮助!当您使用声明变量字符串时,然后
getline (cin,user_guest); //This is correct.
但是当您使用变量char时,这是另一个问题。您的getline
将不适用。请尝试使用以下方法:
char user_guest;
cin.get(user_request);
他已经包括了std::string(user_string是std::string类型)@Alan:他在做getline(cin,user_请求)
这是一个char
。虽然他没有告诉我们错误是什么,但将char
与getline
一起使用可能是错误。@Tony:不用担心。@Ken:对。但是我只是指出他不需要包含,因为它已经包含在内了。答案已经更改以反映这些信息。@Ken:Alan的意思是,我现在编辑掉的建议他#include是没有必要的,因为他已经包含了它,并且用户#string变量是一个字符串。很抱歉造成混淆。是的,错误消息显示它无法从char中推断参数。请将错误粘贴到您的问题中,以便我们知道我们正在尝试修复什么。如果您愿意使用std::string
您必须使用free函数,而不是std::istream::getline()
成员函数。成员函数不会重载使用std::string
。
cin >> user_string;
user_request= user_string[0];
getline (cin,user_guest); //This is correct.
char user_guest;
cin.get(user_request);