注册 登录
编程论坛 C++教室

谁帮我改下删除数字的程序!

xiaxiang1986 发布于 2008-09-18 16:52, 658 次点击
目的:从输入的一组数字中删除指定的数字后再显示删除后的数字
问题:当删除连续的数字,如1,2,3,4,2,删除2,显示1,3,4 这个是正确的,但是1,2,2,2,2,删除2,显示的是1,2。请帮指点下那里出问题了,谢谢!我感觉是输出函数i<=MAX-m;范围有问题,但改成i<MAX-m;还是有问题!

include <iostream>
#include <iomanip>
#include <cstdio>
#define MAX 5
int flag=0,m=0;
using namespace std;
void read(int dt[])
{
     int i;
     cout<<"please enter data:\n";
     for(i=0;i<MAX;i++)
     cin>>dt[i];
     }
void delet(int dt[],int del)
{ int i,j;
  for(i=0;i<MAX;i++)
  {
   if(del==dt[i])
   { flag=1;
     ++m;
     for(j=i;j<MAX-m;j++)
     dt[j]=dt[j+1];
     }
     continue;
     cout<<"\ndeleted ok!";
     }
     
     if(flag==0)
     cout<<"NO found!";
     }
void list (int dt[])
{ int i;
  if(flag==0)
  for(i=0;i<MAX;i++)
 cout<<setw(5)<<dt[i];
  else
  for(i=0;i<MAX-m;i++)
  cout<<setw(5)<<dt[i];
}
int main()

{  int data[MAX],del;
   read(data);
   cout<<"Org data:\n";
   list(data);
   cout<<"\nplease input delete data:\n";
   cin>>del;
   delet(data,del);
   cout<<"\ndata after delete: \n";
   list(data);
   system("pause");
   return 0;
} [/font]
3 回复
#2
sunlu8hao2008-09-18 17:20
void delet(int dt[],int del)
{ int i,j;
  for(i=0;i<MAX;i++)
  {
   if(del==dt[i])
   { flag=1;
     ++m;
     for(j=i;j<MAX-m;j++)//这里可以看出  只要有连续两个(或以上)一样的del
     dt[j]=dt[j+1];     //你就删除不干净
     }
     continue;
     cout<<"\ndeleted ok!";
     }
     
     if(flag==0)
     cout<<"NO found!";
     }
#3
sunlu8hao2008-09-18 17:27
并且你没考虑整个数组的数字都是你想要删除的
#4
xiaxiang19862008-09-18 19:41
没有给我指点改正下的?
1