以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  [求助]再请教一个c++问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=62516)


--  作者:segeon
--  发布时间:5/12/2008 7:26:00 PM

--  [求助]再请教一个c++问题
这个程序有点长,如果你能坚持把它读完,我将非常感谢你的耐心和你乐于助人的品质。现在这个程序是调试成功,并且经运行证实没问题的。但是我有点不解其中一个细节,其中红色的部分我用了两次getline函数才能保证财产所有者姓名的输入,而如果删掉一个就会跳过,直接执行下一步。不明白为什么。把下面的程序复制到VC里面运行一下,然后删掉其中一个getline语句再运行一次就能看出问题所在了

//处理一批财产市价,并显示它们的估价和税金
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;

void showInstruct();//向用户显示程序的用途和用法
void showNameAndDate();//显示报表名称,输入并回显估价员姓名和估价日期
float processData();//处理数据,并把总税金作为该函数的值返回
void showTotalTax(float);//把总税金作为输入,显示该数值

const float TAX_RATE=150*1.0/1000,
            ESTIMATE_VAL_PERCENT=28*1.0/100;

void main()
{
 float totalTax;
 showInstruct();
 showNameAndDate();
 totalTax=processData();
 showTotalTax(totalTax);
}

void showInstruct()
{
 cout<<"该程序用于处理财产的市价,显示其估价及应缴纳的税金。"<<endl<<"该程序可不断处理数据,直到输入999999,程序运行结束"<<endl;
}

void showNameAndDate()
{
 string name,date;
    cout<<"********************新立镇才财产估价表***********************"<<endl;
 cout<<"请输入估价员的姓名:"<<endl;
 getline(cin,name);
 cout<<"请输入估价日期:"<<endl;
 getline(cin,date);
    cout<<"估价员:"<<name<<"    估价日期:"<<date<<endl;
}
float processData()
{
 float propertyVal,totalTax=0,individualTax;
 string owner;
 
 cout<<"请输入所有者名字:";
 getline(cin, owner);//输入财产所有者姓名
 cout<<"请输入市价:";
 cin>> propertyVal;//输入市价
 while(propertyVal!=999999)
 {individualTax=propertyVal*ESTIMATE_VAL_PERCENT*TAX_RATE;
  totalTax+=individualTax;
  cout <<"  财产所有者  " << "  财产市价  "<<"  估计价值  "<<"  税金  "<<endl;
  cout <<setw(12)<<owner<<setw(12)<<propertyVal<<setw(12)<<propertyVal*ESTIMATE_VAL_PERCENT<<setw(8)<< individualTax<<endl;
  cout<<"请输入所有者名字:";
  getline(cin, owner);//输入财产所有者姓名
  getline(cin, owner);
  cout<<"请输入市价:";
  cin>> propertyVal;//输入市价
 }
 return totalTax;
}

void showTotalTax(float totalTax)
{
 cout<<"————————————————————————"<<endl;
 cout<<"总税金为:"<<totalTax<<endl;
}


--  作者:yarakchou
--  发布时间:5/25/2008 1:33:00 AM

--  
getline:   //用于string 类
istream&     getline(   istream   &is,   string   str,   char   delimiter   );

在标准C++中是只要一个回车,但是在vc6.0 后者要两个回车.  支持不好.
所以会出现要用两个getline();



--  作者:yarakchou
--  发布时间:5/25/2008 1:38:00 AM

--  

void showNameAndDate()中还得再加一行getline(cin,date);
才可以正确运行

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
2,932.617ms