社区
C++ 语言
帖子详情
是cin.getline()出问题了吗?
aa1298
2004-11-22 07:39:23
这是一个关于类继承的简单程序,程序编译通过了,可是在输入的时候老是出问题,不能按照提示正常输入,可以肯定的是main()函数以上的程序都没有问题,问题是在main()函数里,我怀疑问题是出在cin.getline()和循环上,改了很久一直找不到问题的所在,请大虾给予指点,多谢了.
...全文
184
5
打赏
收藏
是cin.getline()出问题了吗?
这是一个关于类继承的简单程序,程序编译通过了,可是在输入的时候老是出问题,不能按照提示正常输入,可以肯定的是main()函数以上的程序都没有问题,问题是在main()函数里,我怀疑问题是出在cin.getline()和循环上,改了很久一直找不到问题的所在,请大虾给予指点,多谢了.
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
()的区别
cin
.get()和
cin
.
getline
()的区别 两者都是读取一行字符串 不同的是
cin
.
getline
()函数 会丢弃换行符,但是会将它转为空字符’\0’,一般格式为
cin
.
getline
(array,size),array表示数组的变量名,size表示可以获取的字符数,如size=20,
cin
.
getline
()会从输入中读取19个字符,剩下的一个字符自动添加空字符。
cin
.get(...
cin
.
getline
() 函数用法
cin
.
getline
() 函数的完整形式有三个参数:
cin
.
getline
(接收字符的数组名,接收字符的个数,结束标志)
cin
、
cin
.get()、
cin
.
getline
()、
getline
()的区别
测试平台g++ 5.4.0和VS2015社区版。 输入原理简述: 程序的输入都建有一个缓冲区,即输入缓冲区。每次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而
cin
函数直接从输入缓冲区中取数据。正因为
cin
函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,
cin
函数会直接取得这些残留数据而不会请求键盘输入。 比如下面的例子: voidtest_i...
cin
.
getline
和
getline
区别
1.
cin
.
getline
()函数
cin
.
getline
(字符数组名,字符个数,结束标志),结束标志可以省略,碰到回车就会停止。
cin
.
getline
()可以接收空格,直到碰到回车才停止,所以会读取n-1个元素。 #include <iostream> using namespace std; int main() { char a[100] ; cout<<"输入的值为:"<<end;
cin
.
getline
(a, 10); for(...
cin
,
cin
.
getline
(),
getline
()
当同时使用
cin
>>,
cin
.
getline
()时,需要注意的是,在
cin
>>输入流完成之后,需要使用
cin
.get()消除换行符带来的影响。3、如果将例子中
cin
.
getline
()改为
cin
.
getline
(m,5,‘a’);1、
cin
.
getline
()实际上有三个参数,
cin
.
getline
(接收字符串的变量,接收字符个数,用法2:接收一个字符串,遇“空格”、“TAB”、“回车”就结束。输入:aaaa aaaa aaaa aaaa。输
出
:aaaa aaaa aaaa aaaa。
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章