2012-01-21 69 views
5

Trong C, bạn có các cờ "%c""%f" định dạng cho các chức năng giống như printf - và scanf. Cả hai hàm này sử dụng đối số độ dài biến đổi ..., luôn chuyển đổi floats thành doubleschars thành ints.Tại sao `"% c "` tồn tại trong `printf` nếu` char` được chuyển thành `int`?

Câu hỏi của tôi là, nếu chuyển đổi này xảy ra, tại sao các cờ riêng biệt cho charfloat tồn tại? Tại sao không chỉ sử dụng các cờ giống như đối với intdouble?

câu hỏi liên quan:
Why does scanf() need "%lf" for doubles, when printf() is okay with just "%f"?

Trả lời

8

Bởi vì cách thức mà nó được in ra là khác nhau.

printf("%d \n",100); //prints 100 
printf("%c \n",100); //prints d - the ascii character represented by 100 
+0

Ồ .. hiển nhiên. Còn về 'float' thì sao? –

+3

@PaulManta: Cờ định dạng '% f' mong đợi đối số' double'. –

0

floatdouble có cơ quan đại diện khác nhau máy hoặc kích cỡ, và công ước gọi: nhiều bộ vi xử lý có đăng ký dành riêng cho dấu chấm động mà có thể được sử dụng cho lập luận đi qua.

Và tiêu chuẩn C yêu cầu đối số short được chuyển đổi thành các đối số intfloat được chuyển đổi thành double.

+1

Lưu ý rằng các chuyển đổi này không được thực hiện cho tất cả các đối số, chỉ cho các đối số trong đó khai báo hàm không chỉ định kiểu tham số. –

+0

@Keith: những gì liên quan đến câu hỏi này là các chương trình khuyến mãi luôn được áp dụng cho varargs. Như bạn nói là một tập con của "đối số trong đó khai báo hàm không chỉ định kiểu tham số". –

Các vấn đề liên quan