01/10/2018, 10:20

Thư viện dos.h không sử dụng được trong code block

chào các bạn, mình có xem qua phần tạo âm thanh trong cuốn lập trình C của GS phạm văn ất
mình có test thử một đoạn code tạo một tiếng “bíp”
đây là code mà mình test

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
void beep(void);
void beep(void)
{
    sound(150);
    delay(150);
    nosound();
}
int main()
{
  int n;
  printf("nhap 1 so tu 1 ->5
");
  scanf("%d",&n);
  if(n>5||n<1)
  {
      beep();
      printf("
sai");
  }
  else
    printf("dung
");
    printf("nhan enter
");
}

nhưng mà khi mình compiler nó báo lỗi
như thế này undefined reference to `sound'|
undefined reference to `delay'|
undefined reference to `nosound'|
error: ld returned 1 exit status
có phải là do code block không hỗ trợ thư viện dos.h phải không mọi người

明玉 viết 12:36 ngày 01/10/2018

Bạn nên đổi sang tài liệu khác mới hơn, đa phần sách dạy C/C++ ở Việt Nam đã quá cũ chưa được cập nhật. dos.h là dành cho MS DOS Muốn kêu beep trên Windows thì phải học thêm WinAPI.
API Beep: https://msdn.microsoft.com/en-us/library/windows/desktop/ms679277(v=vs.85).aspx (Sync, bíp ở loa tích hợp trong bo mạch chủ, Win7 thì được redirect lên default sound)
API MessageBeep: https://msdn.microsoft.com/en-us/library/windows/desktop/ms680356(v=vs.85).aspx (Async, kêu lên thế nào thì tùy việc truyền uType thế ấy)
Các WinAPI cơ bản thì bắt đầu từ cái này <windows.h>

rogp10 viết 12:36 ngày 01/10/2018

chào các bạn, mình có xem qua phần tạo âm thanh trong cuốn lập trình C của GS phạm văn ất

Trong tài liệu này có mấy lời khuyên chỉ dành riêng cho Turbo vì nó lỗi tùm lum và sách này viết cho những người dùng cái đó. Còn thư viện này thì cũ rồi.

Hoài Nam Trương viết 12:31 ngày 01/10/2018

<windows.h>

Vậy là mình phải khai báo thêm thư viện đó thì mới chạy được đoạn code trên phải không bạn

Hoài Nam Trương viết 12:27 ngày 01/10/2018

học thêm WinAPI.

win api là phần lập trình giao diện phải không bạn ?, không biết code block có hỗ trợ không nữa

明玉 viết 12:28 ngày 01/10/2018

Không.
Bạn phải đổi sang lệnh khác, thư viện khác.
Bạn include cái trên vào, rồi tìm hiểu 2 cái API Beep như 2 link mà mình đưa ấy. Và đổi gấp, gấp, gấp liền sang tài liệu mới, không dùng tài liệu cũ nữa.

Văn Dương viết 12:37 ngày 01/10/2018

WinAPI là những hàm mà MS hỗ trợ để tạo ứng dụng cho Windows.
Học C/C++ mà không học API thì làm được cái gì nhỉ ?
QT kéo thả ??

*grab popcorn* viết 12:20 ngày 01/10/2018

Trong C có ký tự \a cũng kêu tiếng beep đó

Bạn có thể làm như sau để test.

printf("\a");

Hoài Nam Trương viết 12:23 ngày 01/10/2018

Mình chỉ rảnh rỗi tìm hiểu thêm về phần này thôi bạn, vs lại mình cũng ko có học theo quyển này, dù gì cũng ths bạn đã góp ý

Hoài Nam Trương viết 12:36 ngày 01/10/2018

Mình chỉ mới học C, chưa học C++,mình định khi nào mình học C++ sẽ tìm hiểu về nó sau

Lone viết 12:24 ngày 01/10/2018

trong C có kí tự \a sẽ phát ra tiếng beep của hdh, mỗi máy sẽ phát ra tiếng khác nhau tùy thuộc vào cài đặt ở mỗi máy. ngoài ra trong thư viện windows.h nếu mình nhớ không nhầm có hàm beep() nhận 2 tham số đầu vào: 1 là tần số âm thanh phát ra (hz) và thời gian phát âm thanh (ms)

Bài liên quan
0