Vấn đề tham biến tham trị trong ngôn ngữ C/C++

Xin chào mọi người.
Em mới bắt đầu học lập trình C và đang học theo giáo trình Lập trình C cơ bản của Aptech.
Em đã học đến phần hàm và bắt đầu gặp khó khăn trong việc hiểu bản chất của tham biến tham trị sử dụng trong C/C++. Em có tham khảo các bài viết Sự khác nhau giữa tham biến và tham trị trong C và C++ cũng vấn đề như vậy nhưng chưa tìm được câu trả lời(Em sửa thành file cpp nhưng vẫn không được) . Một bài viết khác Khái niệm “tham biến”, “tham số”, “tham chiếu”, “tham trị” là gì thì em bắt đầu hình dung ra mang máng. Nhưng vấn đề là đoạn code như ảnh ở dưới thì em gõ vô trình IDE Code::Blocks thì nó không chạy.
Ảnh chụp

Ảnh code trong giáo trình.
Em mong mọi người giúp em fix lỗi này hộ em, em xin cám ơn!

#include <stdio.h>
#include <conio.h>
// khai bao prototype
void time(int & , int &);
// ham doi phut thanh gio:phut
void time(int &ig, int &ip)
{
ig = ip / 60;
ip %= 60;
}
void main(void)
{
int igio, iphut;
printf("Nhap vao so phut : ");
scanf("%d", &iphut);
time(igio, iphut);
printf("%02d:%02d\n", igio, iphut);
getch();
}

conio.h không hề có trong chuẩn của C/C++, cái này chỉ tồn tại trong mấy bộ compiler và SDK trên MS-DOS.
Tài liệu của bạn từ thời kì đồ đá??

1 Like

Cám ơn bạn đã quan tâm bài viết của mình, mình có bỏ đi hoặc thêm thư viện stdlib.h nó vẫn không hoạt động. Mình thấy cuốn tài liệu này học cũng dễ hiểu, mình có học thêm tài liệu Kĩ thuật lập trình c cơ bản và nâng cao của GS. Phạm Văn Ất. Vấn đề là không hiểu đoạn code trên của tác giả lỗi gì nhỉ, Tác giả cuốn Aptech dùng trình IDE BORLAND C (Nhưng mình nghĩ nó không ảnh hưởng nhiều) !

Hàm main của bạn nên trả về một giá trị int (hàm main phải là int main), nhiều compiler không thích hàm void main đâu. Chuyện hàm main trả về giá trị sẽ có lợi khi bạn lập trình multi process, không thì cứ return 0 là được. Compiler nó báo lỗi y như mình nói.
Vả lại khái niệm tham chiếu chỉ có trong C++, sách ghi là C nhưng lại dạy pha trộn kiểu C++, hơi có phần “lẩu thập cẩm” :smiley:

3 Likes

Hóa ra là cuốn này. Đây không phải là code C đâu bạn.

Tham biến với tham trị là một cặp khái niệm (phổ quát) đối nhau, còn tham chiếu C++ là một “đối tượng” riêng, có công dụng chính là truyền tham biến.

1 Like
#include <stdio.h>
#include <conio.h>
// khai bao prototype
void time(int & , int &);
// ham doi phut thanh gio:phut
void time(int &ig, int &ip)
{
ig = ip / 60;
ip %= 60;
}
int main()
{
int igio, iphut;
printf("Nhap vao so phut : ");
scanf("%d", &iphut);
time(igio, iphut);
printf("%02d:%02d\n", igio, iphut);
return 0;
}

Mình đã sửa code và nó vẫn không chạy.

Bạn bỏ cái conio.h ra đi, mình thử trên cpp.sh code này thấy ok mà:

#include <stdio.h>
// khai bao prototype
void time(int &, int &);
// ham doi phut thanh gio:phut
void time(int &ig, int &ip)
{
    ig = ip / 60;
    ip %= 60;
}
int main()
{
    int igio, iphut;
    printf("Nhap vao so phut : ");
    scanf("%d", &iphut);
    time(igio, iphut);
    printf("%02d:%02d\n", igio, iphut);
    return 0;
}

Hoặc là compiler của bạn không hiểu kí tự trắng ở đằng sau &, phải sửa lại chỗ prototype như mình mới ghi.

1 Like

Code của bạn đang dùng tham chiếu &, chỉ có trong C++. Bạn lại dùng compiler C để biên dịch gây lỗi. Bạn chú ý học C hay C++ thì học riêng ra đừng học lẫn lộn thế không tốt.

2 Likes

Hi hautruong2k.
Vứt cái giáo trình đó đi.Tiêu đề là C nhưng lại code C++.

P/S Nhưng phải nói là hình như không có quyển nào về C mới và giới thiệu đủ về compiler và setup thì phải.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?