C++ 使用getline代替cin>&燃气轮机;

C++ 使用getline代替cin>&燃气轮机;,c++,C++,嘿,伙计们,我的程序如下,但当我输入一个以w、d、b或q开头的单词时,比如存款而不是字母d,程序只是不断重复最初的问题“您想取款、存款等吗?”我试图将cin>>转换为getline(cin,用户请求),但这给了我一个错误。我很确定解决这个问题的方法是将cin转换为getline,但我不确定如何正确地进行转换。如果有人能帮忙的话。有没有办法用cin语句来完成这个程序 #include <iostream> #include <string> using namespace

嘿,伙计们,我的程序如下,但当我输入一个以w、d、b或q开头的单词时,比如存款而不是字母d,程序只是不断重复最初的问题“您想取款、存款等吗?”我试图将cin>>转换为getline(cin,用户请求),但这给了我一个错误。我很确定解决这个问题的方法是将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;
}
#包括
#包括
使用名称空间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);