回答一位同學的問題

來源:互聯網
上載者:User

文章地址點擊開啟連結,太長了,放這裡吧。

回答文章的主人:裡面的printf和scanf運行起來怪怪的,總是運行很多次,感覺莫名其妙的,我用了cout和cin。

改的地方還是有的,自己可以對比一下。

#include "stdafx.h"#include <iostream>#include <stdio.h>#include <malloc.h>#include <string>//加的using namespace std;#define LEN sizeof(struct person)struct person{int num;char name[10];int age;int salary;struct person * next;};int a=0;person * creat()//建立帶頭結點的鏈表。{cout<<"--------------- creat() 被調用  ---------------"<<endl;person *head;//指向頭結點的指標person *current;//指向當前節點的指標head = (struct person * )malloc(LEN);cout<<"建立第一個節點,依次輸入:員工號,姓名,年齡,薪水"<<endl;current = (struct person * )malloc(LEN);cin>>current->num;cin>>current->name;cin>>current->age;cin>>current->salary;head=current;a++;while (1){char c;cout<<"繼續?(y/n) ";cin>>c;if (c=='n'){break;}cout<<"依次輸入:員工號,姓名,年齡,薪水"<<endl;person * newnode = (struct person * )malloc(LEN);cin>>newnode->num;cin>>newnode->name;cin>>newnode->age;cin>>newnode->salary;a++;current->next=newnode;current=newnode;}current->next=NULL;//這個是必須的,否則列印的時候出錯return (head);}void print(person * p){cout<<"--------------- print() 被調用 ---------------"<<endl;while(p!= NULL){cout<<p->num<<""<<p->name<<""<<p->age<<""<<p->salary<<endl;p = p->next;}}void search1( person * p)//按照員工號尋找{cout<<"--------------- search1() 被調用 ---------------"<<endl;int b;cout<<"Please input a person number: ";cin>>b;if(p != NULL){while(b!=p->num && p->next!=NULL){p = p->next;}if (b==p->num){cout<<"number="<<p->num<<" name="<<p->name<<" age="<<p->age<<" salary="<<p->salary<<endl;}else{cout<<"未發現目標!"<<endl;}}else printf("沒頭的鏈表,這不可能存在的!!\n");}void search2( person * p)//按照員工姓名尋找{cout<<"--------------- search1() 被調用 ---------------"<<endl;char name[10];cout<<"Please input a person name: ";cin>>name;if(p != NULL){while(strcmp(name,p->name) && p->next!=NULL){p = p->next;}if (!strcmp(name,p->name)){cout<<"number="<<p->num<<" name="<<p->name<<" age="<<p->age<<" salary="<<p->salary<<endl;}else{cout<<"未發現目標!"<<endl;}}else printf("沒頭的鏈表,這不可能存在的!!\n");}person * insert( person * p)//在尾部追加一個節點{cout<<"--------------- insert() 被調用 ---------------"<<endl;person * newnode;//新加的節點person *current;//指向當前節點的指標current=p;while (current->next != NULL){current = current->next;}cout<<"依次輸入:員工號,姓名,年齡,薪水"<<endl;newnode=(person*)malloc(LEN);cin>>newnode->num;cin>>newnode->name;cin>>newnode->age;cin>>newnode->salary;a++;current->next=newnode;current=newnode;current->next = NULL;return (p);}person * del1( person * p)//按照員工號刪除一個節點{cout<<"--------------- del1() 被調用 ---------------"<<endl;person *current;//指向當前節點的指標person *q;//找到的那個節點,需要刪除的int num;if (a==1){cout<<"只有頭結點,不能刪除!"<<endl;return p;}cout<<"Please input a person number : ";cin>>num;current=p->next;//當前節點從頭部之後的節點開始,尋找目標while (current->next != NULL && current->next->num!=num){current = current->next;}if (current->next==NULL){cout<<"未發現目標,無法刪除!"<<endl;return p;}q=current->next;current->next=current->next->next;delete q;a--;return(p);}person * del2( person * p)//按照員姓名刪除一個節點//刪除當前節點的下一個節點{cout<<"--------------- del2() 被調用 ---------------"<<endl;person *current;//指向當前節點的指標char name[10];if (a==1){cout<<"只有頭結點,不能刪除!"<<endl;return p;}cout<<"Please input a person name : ";cin>>name;current=p;//當前節點從頭部之後的節點開始,尋找目標while (current->next != NULL && strcmp(name,current->next->name)){current = current->next;}if (current->next->next!=NULL){current->next=current->next->next;a--;}return(p);}person * change( person * p)//改變某個使用者的資訊,索引項目為name{cout<<"--------------- change() 被調用 ---------------"<<endl;person *current;//指向當前節點的指標char name[10];cout<<"Please input a person name : ";cin>>name;current=p;//當前節點從頭部節點開始,尋找目標while (current->next != NULL && strcmp(name,p->name)){current = current->next;}if (current==NULL){cout<<"未發現目標,無法更改資訊!"<<endl;return p;}cout<<"更改資訊,依次輸入:員工號,姓名,年齡,薪水 "<<endl;cin>>current->num;cin>>current->name;cin>>current->age;cin>>current->salary;return(p);}person * sort( person * p)//按員工號升序排序{cout<<"--------------- sort() 被調用 ---------------"<<endl;//用交換排序,時間複雜度為O(n*n)person * pi;//有序序列的頭指標person * pj;//有序序列的為指標person * temp=(struct person * )malloc(LEN);for (pi=p;pi!=NULL;pi=pi->next){for (pj=pi;pj!=NULL;pj=pj->next){if (pj->num < pi->num){temp->num=pj->num;strcpy(temp->name,pj->name);temp->age=pj->age;temp->salary=pj->salary;pj->num=pi->num;strcpy(pj->name,pi->name);pj->age=pi->age;pj->salary=pi->salary;pi->num=temp->num;strcpy(pi->name,temp->name);pi->age=temp->age;pi->salary=temp->salary;//賦值比較麻煩,可以重載賦值“=”運算}}}return p;}int _tmain(int argc, _TCHAR* argv[]){int m ;  //使用者的order numberperson * h;printf("############員工資訊菜單#########################\n");printf("# 1.輸入資訊 \n");printf("# 2.列印資訊 \n");printf("# 3.按員工號尋找 \n");printf("# 4.按姓名尋找 \n");printf("# 5.插入資訊 \n");printf("# 6.按員工號刪除資訊\n");printf("# 7.按姓名刪除資訊 \n");printf("# 8.更改資訊 \n");printf("#################################################\n");while (1){cout<<"選擇菜單選項:";cin>>m;if (m<1 || m>9){break;;}switch(m){case 1: h = creat();break;case 2: print(h);break;case 3: search1(h);break;case 4: search2(h);break;case 5: h=insert(h);break;case 6: h=del1(h);break;case 7: h=del2(h);break;case 8: h=change(h);break;case 9: h=sort(h);break;default : printf("ERROR!\n");break;}}system("pause");return 0;}

一直都不喜歡黑黑的菜單,用起來也覺得不舒服。

代碼已經調試通過,如果還有問題,日後改正。

應該是這個月的最後一篇了。下個月要寫論文了,不能這麼玩下去了。

祝大家好運!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.