标题:请问为什么我的程序在第一个循环报错。并且不能输入有空格的字符串呢?一下 ...
只看楼主
ghost_prince
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-4-19
结帖率:0
已结贴  问题点数:20 回复次数:8 
请问为什么我的程序在第一个循环报错。并且不能输入有空格的字符串呢?一下是代码
编写一个程序记录捐助钱。该程序要求用户输入捐款者数目,然后要求用户输入每一个捐款者的姓名和款项。
这些信息被储存在一个动态分配的结构数组中。每个结构都有两个成员。读取所有数据后。程序将显示所有捐
超过10000的捐款的姓名及捐款者。改列表要以Patrons开头,如果某种类别没有捐款者,则程序将打印单词“none”。
#include<iostream>
struct stu_helpers
{
    char name[20];
    double money;
};
using namespace std;
int main(int,char**)
{
    int NO_people;
   
    cout<<"Please enter the number of the people have donate:";
    (cin>>NO_people).get();

    stu_helpers *p_stu_helpers=new stu_helpers[NO_people];    //申请内存
    stu_helpers *temp1;stu_helpers *temp2;
    temp1=temp2=p_stu_helpers;
    cout<<"now please input those people infor mation";
    for(int i=0;i<NO_people;i++,temp1++){
        cout<<"Enter the "<<i+1<<" name:";
        cin.get();
        cin>>p_stu_helpers->name;
        cout<<"Enter the money to donate:";
        cin>>p_stu_helpers->money;}

    cout<<"those people have donate beyond 10000:"<<endl;
    for(int i=0;i<NO_people;i++,temp2++){
        if(p_stu_helpers->money<10000)continue;
        if(p_stu_helpers->money>=10000)
            cout<<p_stu_helpers->name<<"\t"<<p_stu_helpers->money;}

    for(int i=0;i<NO_people;i++,p_stu_helpers++)delete p_stu_helpers;    //依次释放内存
    return 0;
}
搜索更多相关主题的帖子: 姓名 double include people number 
2012-04-19 11:38
ghost_prince
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-4-19
得分:0 
求大神给力啊。。。
2012-04-19 11:49
ghost_prince
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-4-19
得分:0 
在顶
2012-04-19 12:21
ghost_prince
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-4-19
得分:0 
再顶
2012-04-19 12:55
ghost_prince
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-4-19
得分:0 
版主大神。帮帮忙吧
2012-04-19 14:05
fly_sky_chen
Rank: 2
等 级:论坛游民
帖 子:3
专家分:10
注 册:2010-5-26
得分:10 
#include<iostream>
 struct stu_helpers
 {
     char name[20];
     double money;
     stu_helpers * next;           //做个指针
 };
 using namespace std;
 int main(int,char**)
 {
     int NO_people;
     int i;
     
     cout<<"Please enter the number of the people have donate:\n";
     (cin>>NO_people).get();
 
     stu_helpers *p_stu_helpers=new stu_helpers[NO_people];    //申请内存
     stu_helpers *temp1;
     stu_helpers *temp2;

     temp1=temp2=p_stu_helpers;
     cout<<NO_people<<endl;

     cout<<"now please input those people information\n";
     for(i=0;i<NO_people;i++,temp1++)
     {
         cout<<"Enter the "<<i+1<<" name:\n";
         //cin.get();
         cin>>temp1->name;
         cout<<"Enter the money to donate:\n";
         cin>>temp1->money;
     }
 
    cout<<"those people have donate beyond 10000:"<<endl;
     for(i=0;i<NO_people;i++,temp2++){
         //if(p_stu_helpers->money<10000) continue;
         //if(p_stu_helpers->money>=10000)
             cout<<temp2->name<<"\t"<<temp2->money<<endl;}
 
    //for(i=0;i<NO_people;i++,p_stu_helpers++)
     delete [] p_stu_helpers;    //依次释放内存
     return 0;
 }
2012-04-19 22:13
fly_sky_chen
Rank: 2
等 级:论坛游民
帖 子:3
专家分:10
注 册:2010-5-26
得分:0 
那个指针“//做个指针”没有用上,应该是“//cin.get();”这个影响了你的第一次循环;然后后面的内存释放有简单的方式,也不会出错。“delete [] p_stu_helpers;    //依次释放内存 ”,楼主看看,也是新手,多多交流

2012-04-19 22:16
fly_sky_chen
Rank: 2
等 级:论坛游民
帖 子:3
专家分:10
注 册:2010-5-26
得分:0 
//最终代码
#include<iostream>
 struct stu_helpers
 {
     char name[20];
     double money;
     stu_helpers * next;           //做个指针
 };
 using namespace std;
 int main(int,char**)
 {
     int NO_people;
     int i;
     
     cout<<"Please enter the number of the people have donate:\n";
     (cin>>NO_people).get();                             //这个地方lz是怎么用的,还请指教
 
     stu_helpers *p_stu_helpers=new stu_helpers[NO_people];    //申请内存
     stu_helpers *temp1;
     stu_helpers *temp2;

     temp1=temp2=p_stu_helpers;
     cout<<NO_people<<endl;

     cout<<"now please input those people information\n";
     for(i=0;i<NO_people;i++,temp1++)                   //两次循环应该是想用temp1,temp2的吧
     {
         cout<<"Enter the "<<i+1<<" name:\n";
         //cin.get();
         cin>>temp1->name;
         cout<<"Enter the money to donate:\n";
         cin>>temp1->money;
     }
 
    cout<<"those people have donate beyond 10000:"<<endl;
     for(i=0;i<NO_people;i++,temp2++)
     {
         if(temp2->money<10000) continue;
         if(temp2->money>=10000)
             cout<<temp2->name<<"\t"<<temp2->money<<endl;
     }
 
     //for(i=0;i<NO_people;i++,p_stu_helpers++)           //这个就不用了
     delete [] p_stu_helpers;    //依次释放内存

     return 0;
 }
2012-04-19 22:20
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:10 
不错。有人答了。看看问题解决了吗?
2012-04-20 01:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-366151-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.181988 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved