是cin.getline()出问题了吗?

aa1298 2004-11-22 07:39:23
这是一个关于类继承的简单程序,程序编译通过了,可是在输入的时候老是出问题,不能按照提示正常输入,可以肯定的是main()函数以上的程序都没有问题,问题是在main()函数里,我怀疑问题是出在cin.getline()和循环上,改了很久一直找不到问题的所在,请大虾给予指点,多谢了.
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa1298 2004-11-22
  • 打赏
  • 举报
回复
加了while(cin.get()!='\n') continue;也不行,比如说运行以后在 请输入你的操作项1或者2: 后输入23,程序不会提示 请输入正确的选项,而会连续提示输入 请输入你的最大透支额:请输入你的利率: 这是为什么,要怎么改,请大虾指点,谢谢了.
xstom19 2004-11-22
  • 打赏
  • 举报
回复
写错了应该是while(cin.get()!='\n') continue;
xstom19 2004-11-22
  • 打赏
  • 举报
回复
修改后的main函数,可以正常运行,的确是输入部分有问题
int main()//90
{ brass *p[a];
for (int i=0;i<4;i++)
{ char temp[30];//93
long num;
double balan;
cout<<"请输入你的用户名";
cin.getline(temp,30);
cout<<"请输入你的账号:";
cin>>num;
cout<<"请输入你的开户金额:";
cin>>balan;
cout<<"请输入你的操作项1或者2:";//103
char c;
while (cin>>c&&(c!='1'&&c!='2'))
{cout<<"请输入正确的选项!";
}
if (c=='1')
{p[i]=new brass (temp,num,balan);}
else
{cout<<"请输入你的最大透支额:";//111
double d;
cin>>d;
cout<<"请输入你的利率:";
double e;
cin>>e;
p[i]=new brassplus(temp,num,balan,d,e);}
while(cin.get!='\n')
continue;//加了这个while语句就能正常运行了
}
for(i=0;i<4;i++)
{p[i]->viewacct();
cout<<endl;
}
for(i=0;i<4;i++)
{delete p[i];
cout<<endl;
}
cin.get();
cin.get();
return 0;
}
aa1298 2004-11-22
  • 打赏
  • 举报
回复
不好意思,代码忘了贴了,sorry!
#include<iostream>
using namespace std;
class brass
{private:
enum{max=35};
char fullname[max];
long acctnum;//账号
double balance;
public:
brass(const char *s="nullbody", long an=-1,double bal=0.0);
void deposit(double amt);//存款
virtual void withdraw(double amt);//取款
double Balance()const;//13
virtual void viewacct()const;
virtual ~brass(){}
};
class brassplus:public brass
{private:
double maxloan;
double rate;
double owesbank;//透支总额
public:
brassplus(const char * s="nullbody",long an=-1,double bal=0.0,
double ml=500,double r=0.10);//24
brassplus(const brass&ba,double ml=500,double r=0.1);
virtual void viewacct()const;
virtual void withdraw(double amt);
void resetmax(double m){maxloan=m;}
void resetrate(double r){rate=r;}
void resetowes(){owesbank=0;}
};
brass::brass(const char*s,long an,double bal)
{strncpy(fullname,s,max-1);//33
fullname[max-1]='\0';
acctnum=an;
balance=bal;}
void brass::deposit(double amt)
{ if (amt<0)
cout<<"negative deposit not allowed,deposit canceled.";
else
balance=balance+amt;}
void brass::withdraw(double amt)
{if (amt<0)
cout<<"not allowed,withdrawal canceled.\n";
else if (balance<amt)//45
cout<<"you cannot withdraw so many money,withdraw canceled.\n";
else
balance=balance-amt;
}
double brass::Balance() const
{return balance;}//51
void brass::viewacct()const
{cout<<"fullname="<<fullname<<"\n";//53
cout<<"acctnume="<<acctnum<<"\n";
cout<<"balance="<<balance<<"\n";}
brassplus::brassplus(const char *s,long an,double bal,
double ml,double r):brass(s,an,bal)
{
maxloan=ml;
rate=r;
owesbank=0.0;
}
brassplus::brassplus(const brass&ba,double ml,double r):brass(ba)
{maxloan=ml;
owesbank=0.0;
rate=r;
}
void brassplus::viewacct()const
{brass::viewacct();
cout<< "maximum loan:$"<<maxloan<<"\n";//70
cout<<"owed to bank:$"<<owesbank<<"\n";
cout<<"loan rate:"<<100*rate<<"%\n";
}
void brassplus::withdraw(double amt)
{double bal=Balance();
if (amt<=bal)
brass::withdraw(amt);
else if(amt<bal+maxloan-owesbank)
{double advance=amt-bal;
owesbank=owesbank+advance*(1+rate);
cout<<"bank advance:$"<<advance*rate<<endl;//81
deposit(advance);
brass::withdraw(amt);
}
else
cout<<"credit limit exceeded .transaction cancellen.\n";
}
const int a=4;
const int b=30;
int main()//90
{ brass *p[a];
for (int i=0;i<4;i++)
{ char temp[30];//93
long num;
double balan;
cout<<"请输入你的用户名";
cin.getline(temp,30);
cout<<"请输入你的账号:";
cin>>num;
cout<<"请输入你的开户金额:";
cin>>balan;
cout<<"请输入你的操作项1或者2:";//103
char c;
while (cin>>c&&(c!='1'&&c!='2'))
{cout<<"请输入正确的选项!";
}
if (c=='1')
{p[i]=new brass (temp,num,balan);}
else
{cout<<"请输入你的最大透支额:";//111
double d;
cin>>d;
cout<<"请输入你的利率:";
double e;
cin>>e;
p[i]=new brassplus(temp,num,balan,d,e);}
}
for(i=0;i<4;i++)
{p[i]->viewacct();
cout<<endl;
}
for(i=0;i<4;i++)
{delete p[i];
cout<<endl;
}
cin.get();
cin.get();
return 0;
}
CgPanda_ 2004-11-22
  • 打赏
  • 举报
回复
代码贴出来啊

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧