亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1970 | 回復(fù): 7
打印 上一主題 下一主題

[C++] 不知為什么進入死循環(huán) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-08-29 21:52 |只看該作者 |倒序瀏覽
#include <iostream>
using namespace std;
const int INCREMENT=10;
typedef char Names;

class Students
{
private:
        int INITSIZE;
        int pos;
        Names e;
public:
        Names *name;
        int length;
        int listsize;
        void initstudents(Students &,int);
        void deststudents(Students &);
        bool putStudent(Students &);
        bool addStudent(Students &);
        bool delStudent(Students &);
        void seaStudent(Students &);
        void printStudents(Students);
};
void Students::initstudents(Students &s,int maxsize=0)
{
        cout<<endl<<"請輸入字母個數(shù)(回車結(jié)束)";
        cin>>INITSIZE;
        if(maxsize==0) maxsize=INITSIZE;
        s.name=new Names[maxsize];
        if(!s.name) exit(1);
        s.length=0;
        s.listsize=maxsize;
}
void Students::deststudents(Students &s)
{
        delete [] s.name;
        s.name=NULL;
        s.length=0;
        s.listsize=0;
}
bool Students::putStudent(Students &s)
{
        cout<<endl<<"請輸入修改位置(回車結(jié)束)";
        cin>>pos;
        if(pos<1||pos>s.length)
        {
                cout<<endl<<"輸入有誤,請重新輸入!                             "<<endl<<endl;
                return false;
        }
        cout<<endl<<"請輸入修改字母(回車結(jié)束)";
        cin>>e;
        s.name[pos-1]=e;
        cout<<endl<<"已將第"<<pos<<"位字母修改為"<<e<<endl;
        return true;
}
bool Students::addStudent(Students &s)
{
        cout<<endl<<"請輸入插入位置(回車結(jié)束)";
        cin>>pos;
        if(pos<1||pos>s.length+1)
        {
                cout<<endl<<"輸入有誤,請重新輸入!                             "<<endl<<endl;
                return false;
        }
        cout<<endl<<"請輸入插入字母(回車結(jié)束)";
        cin>>e;
        if(s.length>=s.listsize)
        {
                Names *newbase=new Names[s.listsize+INCREMENT];
                if(!newbase) exit(1);
                for(int i=0;i<s.length;i++)
                        newbase=s.name;
                delete [] s.name;
                s.name=newbase;
                s.listsize+=INCREMENT;
        }
        for(int i=s.length-1;i>=pos-1;i--)
                s.name[i+1]=s.name;
        s.name[pos-1]=e;
        s.length++;
        cout<<endl<<"已將字母"<<e<<"插入到第"<<pos<<"位"<<endl;
        return true;
}
bool Students::delStudent(Students &s)
{
        cout<<endl<<"請輸入刪除位置(回車結(jié)束)";
        cin>>pos;
        if(pos<1||pos>s.length)
        {
                cout<<endl<<"輸入有誤,請重新輸入!                             "<<endl<<endl;
                return false;
        }
        for(int i=pos;i<s.length;i++)
                s.name[i-1]=s.name;
        e=s.name[pos-1];
        s.length--;
        cout<<endl<<"已將第"<<pos<<"位字母刪除"<<endl;
        return true;
}
void Students::seaStudent(Students &s)
{
        cout<<endl<<"請輸入查找字母(回車結(jié)束)";
        cin>>e;
        pos=0;
        for(int i=0;i<s.length;i++)
        {
                if(s.name==e)
                {
                        pos+=1;
                        cout<<endl<<"找到第"<<i+1<<"位字母"<<e<<endl;
                }
        }
        cout<<endl<<"一共找到"<<pos<<"個字母"<<e<<endl;
}
void Students::printStudents(Students s)
{
        for(int i=0;i<s.length-1;i++)
                cout<<endl<<i+1<<" "<<s.name<<endl;
        if(s.length-1>=0)
                cout<<endl<<s.length<<" "<<s.name[s.length-1]<<endl;
}
//////////////////////////////main////////////////////////////////
int main()
{
        char code;
        Students students;
        students.initstudents(students,0);
        cout<<"This is linearlist!"<<endl;
        cout<<"這是一個順序表演示!"<<endl;
        while(true)
        {
                cout<<"---------------------------------------------"<<endl;
                cout<<"           1 修改字母信息                    "<<endl;
                cout<<"           2 插入字母信息                    "<<endl;
                cout<<"           3 刪除字母信息                    "<<endl;
                cout<<"           4 查找字母信息                    "<<endl;
                cout<<"           5 所有字母信息                    "<<endl;
                cout<<"           6 退出程序                        "<<endl;
                cout<<"---------------------------------------------"<<endl;
                cout<<endl<<"您的選擇(回車結(jié)束)";
                cin>>code;
                switch (code)
                {
                case '1':
                        cout<<"           1 修改字母信息                    "<<endl;
                        students.putStudent(students);
                        break;
                case '2':
                        cout<<"           2 插入字母信息                    "<<endl;
                        students.addStudent(students);
                        break;
                case '3':
                        cout<<"           3 刪除字母信息                    "<<endl;
                        students.delStudent(students);
                        break;
                case '4':
                        cout<<"           4 查找字母信息                    "<<endl;
                        students.seaStudent(students);
                        break;
                case '5':
                        cout<<"           5 所有字母信息                    "<<endl;
                        students.printStudents(students);
                        break;
                case '6':
                        return 0;
                        break;
                default:
                        cout<<endl<<"輸入有誤,請重新輸入!                             "<<endl<<endl;
                        break;
                }
        }
        students.deststudents(students);
}
//編譯完一切正常,正確輸入時也正常,但假如要求輸入位置時,我誤輸入字母的話就會進入死循環(huán),誰能教教我為什么阿?想不通,這個是我學(xué)數(shù)據(jù)結(jié)構(gòu)寫的一個算法

論壇徽章:
0
2 [報告]
發(fā)表于 2008-08-29 21:53 |只看該作者
原帖由 wzl7222504 于 2008-8-29 21:52 發(fā)表
#include
using namespace std;
const int INCREMENT=10;
typedef char Names;

class Students
{
private:
        int INITSIZE;
        int pos;
        Names e;
public:
        Names *name;
        int length;
        int list ...


太長。。。 有機會再看。。

論壇徽章:
0
3 [報告]
發(fā)表于 2008-08-29 21:57 |只看該作者
不到200行。。。還長

論壇徽章:
0
4 [報告]
發(fā)表于 2008-08-29 22:10 |只看該作者
自己調(diào)試一下,用gdb或者加printf看看

論壇徽章:
0
5 [報告]
發(fā)表于 2008-08-29 22:30 |只看該作者
if(cin)
{}
else
{cin.clear()}

論壇徽章:
4
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT運維版塊每日發(fā)帖之星
日期:2016-08-11 06:20:00IT運維版塊每日發(fā)帖之星
日期:2016-08-15 06:20:00
6 [報告]
發(fā)表于 2008-08-29 22:50 |只看該作者
原帖由 Roemer 于 2008-8-29 22:30 發(fā)表
if(cin)
{}
else
{cin.clear()}


char code;
cin>>code;
從標準輸入讀入數(shù)據(jù)時,可能c++將code解釋成整數(shù)了?
按LZ的做法清空一下cin試試,如下:
cin.clear();
cin>>code;

論壇徽章:
0
7 [報告]
發(fā)表于 2008-08-29 22:59 |只看該作者
students.putStudent(students);

兩個students 同一個對象,為什么要這樣來傳參數(shù)?

論壇徽章:
0
8 [報告]
發(fā)表于 2008-08-30 08:30 |只看該作者
多謝5樓,6樓指點,正是這個原因
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP