2010-05-16 54 views
17

Hôm nay trong cuộc phỏng vấn của tôi, người phỏng vấn hỏi: printf là một hàm và mọi hàm trả về một cái gì đó; int, void, float, vv Bây giờ những gì printf trở lại như nó là một chức năng?Printf trở lại là gì?

+1

Cho dù hàm 'void' 'không trả về bất kỳ thứ gì" hoặc "trả về' void' "là vấn đề ưu tiên ngôn ngữ. – AnT

+19

Đây là một câu hỏi phỏng vấn rất tệ: không ai nên nhớ chi tiết của bất kỳ thư viện nào, tài liệu tồn tại cho điều đó!Điều này có nghĩa là bạn có thể hơi may mắn nếu bạn không nhận được công việc. –

+4

nhưng tôi nhận được công việc và tôi chấp nhận thư mời .. và tôi không biết nó tốt hay xấu nhưng Adobe của nó. Tôi là năm 2009 passout và khá hạnh phúc khi có một công việc trong công ty đó .. :-) –

Trả lời

34

int. Khi thành công, tổng số ký tự được viết sẽ được trả về. Khi không thành công, số âm sẽ được trả về. tài liệu tham khảo

See reference here

8

Không phải mọi hàm trả về một cái gì đó, mà được thể hiện bằng cách sử dụng void:

void function_returns_nothing(void); 

printf là một chức năng (khai báo trong <stdio.h>) và nó trả về một int, đó là số ký tự xuất ra. Nếu xảy ra lỗi, con số này là số âm.

1

printf() 's từ MSDN:

Trả về số ký tự in, hoặc một giá trị âm nếu một lỗi xảy ra.

1

Để thêm một sàng lọc chi tiết để trả lời tốt khác:

printf() trả về một int, nhưng làm thế là dấu hiệu của truyền vs in/viết ký tự?

Các printf hàm trả về số ký tự truyền, hoặc một giá trị âm nếu sản lượng hoặc mã hóa xảy ra lỗi. C11dr §7.21.6.3 3 (nhấn mạnh của tôi)

Khi thành công, số được truyền được trả về. stdout thường được đệm, vì vậy số ký tự in có thể không được nhận ra hoặc không thành công cho đến sau này.

Khi int printf() gặp sự cố vì nhiều lý do, nó trả về số âm. Số lượng ký tự được truyền không xác định.

Nếu thành công sau fflush(stdout) xảy ra, thì giá trị không âm từ printf() chắc chắn là số được in.

int transmitted = printf(......); 
int flush_retval = fflush(stdout); 

int number_certainly_printed = -1; // Unknown 
if (transmitted >= 0 && flush_retval == 0) { 
    number_certainly_printed = transmitted; 
} 

Lưu ý rằng "in" một '\n' thường xả stdout, nhưng ngay cả hành động mà không được xác định.
What are the rules of automatic flushing stdout buffer in C?

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