%Lf là gì trong C
11/24/2010 6:45:28 AM
Đặng Giang Thanh · Đặng Giang Thanh 06:45 24/11/2010 Định dạng định dạng chính xác cho doubleprintf là gì? Là nó %fhay là nó %lf? Tôi tin nó %f, nhưng tôi không chắc chắn. Mẫu mã#include
405 hữu ích 2 bình luận 855k xem chia sẻ answer Hồ Thục Nhi · Hồ Thục Nhi 06:51 24/11/2010 "%f"là định dạng đúng (hoặc ít nhất một) cho một đôi. Có là không có định dạng cho một float, bởi vì nếu bạn cố gắng để vượt qua một floattới printf, nó sẽ được thăng chức doubletrước khi printfnhận nó 1 . "%lf"cũng được chấp nhận theo tiêu chuẩn hiện tại - lđược chỉ định là không có hiệu lực nếu được theo sau bởi công fcụ xác định chuyển đổi (trong số những người khác). Lưu ý rằng đây là một nơi mà các printfchuỗi định dạng khác nhau đáng kể so với các chuỗi định dạng scanf(và fscanf, v.v.). Đối với đầu ra, bạn đang đi qua một giá trị , mà sẽ được đề bạt từ floatđến doublekhi thông qua như là một tham số variadic. Đối với đầu vào bạn đang truyền một con trỏ không được quảng bá, vì vậy bạn phải cho biết scanfbạn muốn đọc a floathay a double, vì vậy scanf, %fcó nghĩa là bạn muốn đọc một floatvà %lfcó nghĩa là bạn muốn đọc một double(và, cho những gì giá trị, cho a long double, bạn sử dụng %Lfcho một trong hai printfhoặc scanf). 1. C99, §6.5.2.2 / 6: "Nếu biểu thức biểu thị hàm được gọi có loại không bao gồm nguyên mẫu, các quảng cáo số nguyên được thực hiện trên mỗi đối số và các đối số có kiểu float được tăng lên gấp đôi. Chúng được gọi là các chương trình khuyến mãi đối số mặc định. " Trong C ++, từ ngữ hơi khác một chút (ví dụ: nó không sử dụng từ "nguyên mẫu") nhưng hiệu quả là như nhau: tất cả các tham số biến đổi trải qua các chương trình khuyến mãi mặc định trước khi chúng được hàm nhận. 524 hữu ích 5 bình luận chia sẻ answer Hoàng Xuân Hiếu · Hoàng Xuân Hiếu 23:10 28/04/2012 Với tiêu chuẩn C99 (cụ thể là dự thảo N1256 ), các quy tắc phụ thuộc vào loại chức năng: fprintf (printf, sprintf, ...) hoặc scanf. Dưới đây là các phần có liên quan được trích xuất:
Các quy tắc tương tự được chỉ định để fprintfáp dụng cho printf, sprintfvà các chức năng tương tự.
Câu chuyện dài, dành cho fprintfcác nhà đầu cơ sau đây và các loại tương ứng được chỉ định:
và cho fscanfnó là:
53 hữu ích 0 bình luận chia sẻ answer Hồ Hải Trà · Hồ Hải Trà 06:48 24/11/2010 Nó có thể %f, %ghoặc %etùy thuộc vào cách bạn muốn số được định dạng. Xem ở đây để biết thêm chi tiết. Công cụ lsửa đổi là bắt buộc scanfvới double, nhưng không phải trong printf. 18 hữu ích 2 bình luận chia sẻ answer Võ Gia Linh · Võ Gia Linh 19:52 07/05/2016 Các printfđịnh dạng chính xác doublelà %lf, chính xác như bạn đã sử dụng nó. Không có gì sai với mã của bạn. Định dạng %lftrong printfkhông được hỗ trợ trong các phiên bản cũ (trước C99) của ngôn ngữ C, điều này tạo ra sự "không nhất quán" hời hợt giữa các chỉ định định dạng cho doubletrong printfvà scanf. Sự không nhất quán bề ngoài đó đã được sửa trong C99. Vì vậy, trong C hiện đại, nó làm cho tinh thần hoàn hảo để thích sử dụng %fvới float, %lfvới doublevà %Lfvới long doublemột cách nhất quán trong cả hai printfvà scanf. 9 hữu ích 0 bình luận chia sẻ answer Bùi Tố Như · Bùi Tố Như 06:49 24/11/2010 %Lf(lưu ý vốn L) là định dạng định dạng cho đôi dài . Đối với đồng bằng doubles, hoặc là %e, %E, %f, %ghoặc %Gsẽ làm. 7 hữu ích 3 bình luận chia sẻ Xem nguồn: https://stackoverflow.com//questions/4264127/correct-format-specifier-for-double-in-printf |