01/10/2018, 09:48

Vì sao kết quả in ra là 0

Chương trình C của mình như sau:

include "stdio.h"
include "conio.h"

main()
{
   int a=7, b=3;
   float c=a/b;
   printf("%d", c);
   getch();
}

Em đang học C, C++ phần ép kiểu(Type Casting). Theo em nghĩ chương trình trên sẽ chạy như sau:
a, b là kiểu integer chiếm 4 bytes trong bộ nhớ. c là kiểu float(thực) chiếm 4 bytes trong bộ nhớ. %d là định dạng kiểu số nguyên có dấu(link tham khảo: http://www.cplusplus.com/reference/cstdio/printf/). Em nghĩ sẽ in ra màn hình giá trị của c là 2. Vậy mà mọi trình biên dịch(compiler) đều cho kết quả là số 0 tròn trĩnh. Mong mọi người giải thích dùm em. Em cám ơn trước!

HK boy viết 11:59 ngày 01/10/2018
  • Format lại code. Thêm 3 dấu ` vào đầu và cuối code.
  • Nên viết int main() vì 1 số compiler không chấp nhận main().
  • Thay chỉ thị "%d" bằng "%f" thì kết quả ra 2.00000. Mình thử thêm dòng printf("%d\n", 2.0003); thì mình nhận được một số khá khủng khiếp. Hình như C++ trả về giá trị rác/hoặc 0 khi chỉ dẫn chỉ thị số sai cho biến, kiểu như c kiểu float mà cho chỉ thị “%d” của số nguyên.
  • Muốn ép kiểu cho biến c, bạn thêm (int) đằng trước c, tức là printf("%d", (int)c);. Đây chính là phép cast (ép kiểu).
  • Byte trong bộ nhớ hình như không liên quan gì đến vụ này.
Bài liên quan
0