社区
C++ 语言
帖子详情
是cin.getline()出问题了吗?
aa1298
2004-11-22 07:39:23
这是一个关于类继承的简单程序,程序编译通过了,可是在输入的时候老是出问题,不能按照提示正常输入,可以肯定的是main()函数以上的程序都没有问题,问题是在main()函数里,我怀疑问题是出在cin.getline()和循环上,改了很久一直找不到问题的所在,请大虾给予指点,多谢了.
...全文
182
5
打赏
收藏
是cin.getline()出问题了吗?
这是一个关于类继承的简单程序,程序编译通过了,可是在输入的时候老是出问题,不能按照提示正常输入,可以肯定的是main()函数以上的程序都没有问题,问题是在main()函数里,我怀疑问题是出在cin.getline()和循环上,改了很久一直找不到问题的所在,请大虾给予指点,多谢了.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
代码贴出来啊
cin
.get()、
cin
.
getline
()、
getline
()、gets()、getchar()
cin
.get()和
cin
.
getline
()、
getline
()和gets()、getchar()的区别
cin
、
cin
.get()、
cin
.
getline
()、
getline
()、gets()等函数的用法
cin
、
cin
.get()、
cin
.
getline
()、
getline
()、gets()等函数的用法
cin
.get()和
cin
.
getline
()之间的区别
以下是对
cin
.get()和
cin
.
getline
()的区别进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
笔记:
cin
,
cin
,get,
cin
.
getline
等输入函数的用法
学C++时的笔记,
cin
、
cin
.get()、
cin
.
getline
()、
getline
()、gets()等函数的用法
基于C++
cin
、
cin
.get()、
cin
.
getline
()、
getline
()、gets()函数的使用详解
学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结
C++ 语言
64,648
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章