PDA

View Full Version : اشکال ایم برنامه و دلیل درست اجرا نشدنه برنامه



fshb_ 1370
دوشنبه 14 شهریور 1390, 11:24 صبح
سلام
این برنامه وقتی اسم رو دریافت میکنه، دیگه خط بعدی رو اجرا نمیکنه، و برنامه در همون حالت میمونه، مشکلش چیه؟
strngbad.h

#ifndef STRNGBAD_H_
#define STRNGBAD_H_
class StringBad
{
private:
char *str;
int len;
staticint num_strings;
staticconstint CINLIM=80;
public:
StringBad(constchar *s);
StringBad();
StringBad(const StringBad &sb);
~StringBad();
int length()const {return len;}
StringBad & operator=(const StringBad &sb);
StringBad & operator=(constchar *c);
char & operator[](int i);
constchar & operator[](int i)const;
friendbooloperator<(StringBad &sb1,StringBad &sb2);
friendbooloperator>(StringBad &sb1,StringBad &sb2);
friendbooloperator==(StringBad &sb1,StringBad &sb2);
friend ostream & operator<<(ostream &os,const StringBad &sb);
friend istream & operator>>(istream &is,StringBad &sb);
staticint HowMany();
};
#endif


strngbad.cpp

#include<iostream>
#include<cstring>
usingnamespace std;
#include"strngbad.h"
int StringBad::num_strings=0;
int StringBad::HowMany()
{
return num_strings;
}
StringBad::StringBad(constchar *s)
{
len=strlen(s);
str=newchar[len+1];
strcpy(str,s);
num_strings++;
}
StringBad::StringBad()
{
len=4;
str=newchar[len+1];
strcpy(str,"C++");
num_strings++;
}
StringBad::StringBad(const StringBad &sb)
{
len=sb.len;
str=newchar[len+1];
strcpy(str,sb.str);
num_strings++;
}
StringBad::~StringBad()
{
--num_strings;
delete [] str;
}
StringBad& StringBad::operator=(const StringBad &sb)
{
if(this==&sb)
return *this;
len=sb.len;
delete [] str;
str=newchar[len+1];
strcpy(str,sb.str);
return *this;
}
StringBad& StringBad::operator=(constchar *c)
{
delete [] str;
len=strlen(c);
str=newchar[len+1];
strcpy(str,c);
return *this;
}
char & StringBad::operator [](int i)
{
return str[i];
}
constchar & StringBad::operator[](int i)const
{
return str[i];
}
booloperator==(StringBad &sb1,StringBad &sb2)
{
return (strcmp(sb1.str,sb2.str)==0);
}
booloperator<(StringBad &sb1,StringBad &sb2)
{
if(strcmp(sb1.str,sb2.str)>0)
returntrue;
else
returnfalse;
}
booloperator>(StringBad &sb1,StringBad &sb2)
{
return (sb2<sb1);
}
ostream & operator<<(ostream &os,const StringBad &sb)
{
os<<sb.str;
return os;
}
istream & operator>>(istream &is,StringBad &sb)
{
char temp[StringBad::CINLIM];
is.get(temp,StringBad::CINLIM);
if(is)
sb=temp;
while (is && is.get() != '\ n')
continue;
return is;
}


stringbadMain.cpp

#include<iostream>
usingnamespace std;
#include"strngbad.h"
constint ArSize=10;
constint MaxLen=81;
int main()
{
StringBad name;
cout<<"hi, what's your name? \n";
cin>>name;
cout<<name<<" ,please enter up to "<<ArSize<<"short savings<empty line to quite>: \n";
StringBad savings[ArSize];
char temp[MaxLen];
int i;
for(i=0;i<ArSize;i++)
{
cout<<i+1<<":";
cin.get(temp,MaxLen);
while(cin&&cin.get()!='\0')
continue;
if(!cin || temp[0]=='\0')
break;
else
savings[i]=temp;
}
int total=i;
cout << "Here are your sayings:\ n";
for (i = 0; i < total; i++)
cout << sayings[i] << ": " << sayings[i] << "\ n";

int shortest=0;
int first=0;
for(i=1;i<total;i++)
{
if(savings[i].length()<savings[shortest].length())
shortest=i;
if(savings[i]<savings[first])
first=i;
}
cout<<"shortest savings: \n"<<savings[shortest]<<endl;
cout<<"first alphabality: \n"<<savings[first]<<endl;
cout<<"This porgram used "<<StringBad::HowMany()<<"string objects. bye!\n";
return 0;
}


قسمت cin>>name;در قسمت stringbadMain.cppبرنامه گیر میکنه.
این کد چی کار میکنه؟ وقتی حذفش میکنم برنامه اجرا میشه ولی آرایه saving رو دریافت نمیکنه.:ناراحت:
while (is && is.get() != '\ n')
continue;