Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    CT chạy đúng kết quả với BC 3.1 nhưng không đúng với BC 5.02

    Tôi có 1 CT khi chạy với Borland C++ 3.1 thì đúng kết quả, nhưng khi chạy với BC 5.02 thì không đúng kết quả, mong các thành viên giúp đở

    Mã:
    #include<iostream.h>
    #include<conio.h>
    #define max 100
    
    int stack[max];
    int top;
    
    void khoitao()
    {
    	top=-1;
    }
    
    int full()
    {
    	return (top==max);
    }
    
    int empty()
    {
    	return (top==-1);
    }
    
    void push(int giatri)
    {
    	if (full()) cout<<"Stack day ";
       else
       	stack[++top]=giatri;
    }
    
    int pop(int *giatri)
    {
    	if (empty()) cout<<"Stack rong";
       else *giatri=stack[top--];
    
    }
    
    void main()
    {
    	clrscr;
    	int k;
    
       khoitao();
       cout<<"Nhap cac phan tu vao stac, -1 ket thuc 
    ";
       do {
       	cin>>k;
          if(k!=-1) push(k);
       } while(k !=-1 && !full());
    
       cout<<"Cac phan tu trong stack la "<<endl;
       while(!empty())
       {
       	cout<<pop(&k)<<endl;
       }
       getch();
    }

  2. #2
    Lỗi: Hàm pop() có kiểu trả về là int nhưng trong thân hàm lại không thấy câu lệnh return nên khi bạn gọi hàm:

    Mã:
        cout<<pop(&k)<<endl;
    Thì pop(&k) sẽ không biết lấy giá trị ở đâu.

    Sửa là:

    Mã:
    void pop(int *giatri)    //// Doi kieu tra ve la void{    if (empty()) cout<<"Stack rong";   else *giatri=stack[top--];} void main(){//....while(!empty())    {        pop(&k);        cout<<k<<endl;   }//....}
    Hoặc chỉ cần sửa:

    Mã:
    int pop(int *giatri){    if (empty()) cout<<"Stack rong";    else *giatri=stack[top--];    return *giatri;      //// tra ve gia tri phan tu dau tien}

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nammae
    Lỗi: Hàm pop() có kiểu trả về là int nhưng trong thân hàm lại không thấy câu lệnh return nên khi bạn gọi hàm:

    Mã:
        cout<<pop(&k)<<endl;
    Thì pop(&k) sẽ không biết lấy giá trị ở đâu.

    Sửa là:

    Mã:
    void pop(int *giatri)    //// Doi kieu tra ve la void{    if (empty()) cout<<"Stack rong";   else *giatri=stack[top--];} void main(){//....while(!empty())    {        pop(&k);        cout<<k<<endl;   }//....}
    Hoặc chỉ cần sửa:

    Mã:
    int pop(int *giatri){    if (empty()) cout<<"Stack rong";    else *giatri=stack[top--];    return *giatri;      //// tra ve gia tri phan tu dau tien}
    Mình xin hỏi đây là hàm có kiểu giá trị trả về thì phải dùng int tại sao dùng void cũng được

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi quangnh89
    bạn ấy dùng void vì giá trị trả về nằm trong biến được trỏ bởi con trỏ int *giatri

    Còn cách sửa thứ 2 nhằm tương thích với hàm main của bạn viết, bạn ấy không muốn sửa nhiều chỗ thôi.
    Ý mình muốn hỏi là khi nào thì dùng int, khi nào thì dùng void hay muốn dùng int hay void là do người viết CT, sao mình thấy cái này nó hơi lằng nhằng, bạn có thể nói ra cụ thể 1 vài trường hợp được không

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi PGD
    Mình xin hỏi đây là hàm có kiểu giá trị trả về thì phải dùng int tại sao dùng void cũng được
    bạn ấy dùng void vì giá trị trả về nằm trong biến được trỏ bởi con trỏ int *giatri

    Còn cách sửa thứ 2 nhằm tương thích với hàm main của bạn viết, bạn ấy không muốn sửa nhiều chỗ thôi.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •