2010-01-29 32 views
13

Rất nhiều người mới bắt đầu đến c, thực tế đây là chương trình thử nghiệm đầu tiên của tôi.Cách in tại C

Tôi thực sự không thể tìm ra cách in số này ra thiết bị đầu cuối.

#include <stdio.h> 

int addNumbers(int a, int b) 
{ 
    int sum = a + b; 
    return sum; 
} 

int main(void) 
{ 
    int a = 4; 
    int b = 7; 

    printf(addNumbers(a,b)); 
    return 0; 
} 

Tôi chắc chắn rằng trong java Tôi chỉ có thể thay thế printf với System.out và nó sẽ làm việc. Tôi đã thử tìm kiếm câu trả lời trước đó nhưng nếu bạn không biết tìm kiếm thì thật khó để tìm câu trả lời.

+1

Bạn có thể tìm thấy http://www.cppreference.com/wiki/ rất hữu ích, xem phần trên Thư viện chuẩn C. –

Trả lời

31

thử điều này:

printf("%d", addNumber(a,b)) 

Đây là documentation for printf.

+7

Có thể muốn thêm một dòng mới hoặc 'fflush (stdout)'. –

17

Đối số đầu tiên cho printf() luôn là giá trị chuỗi, được gọi là chuỗi điều khiển định dạng. Chuỗi này có thể là văn bản thông thường, chẳng hạn như

printf("Hello, World\n"); // \n indicates a newline character 

hoặc

char greeting[] = "Hello, World\n"; 
printf(greeting); 

chuỗi này cũng có thể chứa một hoặc nhiều specifiers chuyển đổi; các chỉ số chuyển đổi này chỉ ra rằng các đối số bổ sung đã được chuyển đến printf() và chúng chỉ định cách định dạng các đối số đó cho đầu ra. Ví dụ: tôi có thể thay đổi bên trên thành

char greeting[] = "Hello, World"; 
printf("%s\n", greeting); 

Trình chỉ định chuyển đổi "% s" dự kiến ​​con trỏ đến chuỗi 0 chấm dứt và định dạng nó thành văn bản.

Đối với đầu ra số nguyên thập phân có chữ ký, sử dụng một trong hai "% d" hay "% i" specifiers chuyển đổi, chẳng hạn như

printf("%d\n", addNumber(a,b)); 

Bạn có thể kết hợp văn bản thường xuyên với specifiers chuyển đổi, như vậy:

printf("The result of addNumber(%d, %d) is %d\n", a, b, addNumber(a,b)); 

Lưu ý rằng các thông số chuyển đổi trong chuỗi điều khiển cho biết các số sốcác loại của các tham số bổ sung. Nếu số hoặc loại đối số bổ sung được chuyển đến printf() không khớp với các trình chỉ định chuyển đổi trong chuỗi định dạng thì hành vi không được xác định. Ví dụ:

printf("The result of addNumber(%d, %d) is %d\n", addNumber(a,b)); 

sẽ dẫn đến bất kỳ điều gì từ kết quả bị cắt xén thành sự cố hoàn toàn.

Có một số cờ bổ sung cho các chỉ định chuyển đổi kiểm soát độ rộng trường, độ chính xác, đệm, biện minh và loại. Kiểm tra hướng dẫn tham khảo C tiện dụng của bạn để có danh sách đầy đủ.

+2

Tôi không thể có được lương tâm tốt cho câu trả lời gợi ý printf (). Chúng ta chưa học cách Luôn chỉ định rõ ràng chuỗi định dạng chưa? Tuy nhiên, tôi thích phần còn lại của câu trả lời. –

+0

@AndrewColeson Tôi không thấy những gì bạn đang nói về. Câu trả lời này sử dụng định dạng '" Xin chào, thế giới \ n "', điều này xảy ra không chứa bất kỳ sự thay thế nào và các định dạng khác. Định dạng là “Luôn chỉ định rõ ràng”. –

+1

@PascalCuoq anh ấy đang nói về 'printf (greeting)', điều này vô hại trong ví dụ này, nhưng vẫn khiến tôi (và có lẽ là những người khác) đang rụt rè một chút. – Cubic

0

printf hơi phức tạp hơn một chút. Bạn phải cung cấp một chuỗi định dạng, và sau đó các biến để áp dụng cho chuỗi định dạng. Nếu bạn chỉ cung cấp một biến, C sẽ giả định đó là chuỗi định dạng và cố gắng in ra tất cả các byte nó tìm thấy trong nó cho đến khi nó chạm vào một kết thúc nul (0x0).

Vì vậy, nếu bạn chỉ cần cung cấp cho nó một số nguyên, nó sẽ vui vẻ diễu qua bộ nhớ tại địa điểm số nguyên của bạn được lưu trữ, bán phá giá bất cứ điều gì rác ở đó để màn hình, cho đến khi nó xảy ra để đi qua một byte chứa 0.

Đối với một lập trình viên Java, tôi tưởng tượng đây là một lời giới thiệu khá thô lỗ đối với việc thiếu kiểm tra kiểu C. Tin tôi đi, đây chỉ là đỉnh của tảng băng trôi. Đây là lý do tại sao, trong khi tôi hoan nghênh mong muốn của bạn để mở rộng tầm nhìn của bạn bằng cách học C, tôi đánh giá cao đề nghị bạn làm bất cứ điều gì bạn có thể để tránh viết chương trình thực sự trong đó.

(Điều này cũng dành cho những người khác cũng đọc bài này.)