2012-06-17 31 views
8

Tôi đang cố gắng sử dụng "printf" trong dự án Visual C++ của mình tuy nhiên nó không hoạt động. Sử dụng hướng dẫn của Lazy Foo, tôi thiết lập SDL trong dự án của mình, nhưng khi tôi chơi nó, printf không làm gì cả.Printf không in bất cứ thứ gì để xuất? C++ SDL

#include "SDL.h" 
#include <stdio.h> 

int main(int argc, char* args[]) { 
    printf("Testing"); 
    return 0; 
} 

Kết quả trông như thế này:

The program '[4664] SDL Testing.exe: Native' has exited with code 0 (0x0). 

Và đó là về nó. Điều gì có thể sai?

+0

Thông thường '0' biểu thị thành công. Cố gắng lấy bất kỳ đầu vào (hoặc) giữ một điểm break tại tuyên bố trở lại. – Mahesh

+0

@Mahesh Tôi đã thử đặt điểm ngắt trong thời gian tôi sử dụng printf, vẫn không có đầu ra. : ( – Qasim

+0

Cửa sổ đầu ra trong Visual Studio! = Stdout hoặc stderr. –

Trả lời

8

SDL theo mặc định chuyển hướng stdout sang tệp, stdout.txt. Bạn nên tìm nó trong thư mục làm việc của chương trình.

+0

Cảm ơn bạn. Tệp này được tạo trong thư mục Debug dự án Visual C++, chứa tất cả các hàm "std :: cout" mà tôi gọi. – Qasim

1

Có thể bạn không nhìn thấy đầu ra vì bạn đang chạy chương trình từ bên trong Visual Studio bằng cách nhấn F5 và cửa sổ bảng điều khiển đóng sau khi thoát chương trình.

Bạn có thể thực hiện một trong 3 điều sau -
Đặt điểm ngắt tại câu lệnh trả về.
Đặt câu lệnh getchar() trước câu lệnh trả về.
Chạy chương trình bằng cách nhấn Ctrl + F5 thay vì F5.

Tất cả những điều trên sẽ khiến cửa sổ bảng điều khiển ở lại trên màn hình.

Bạn cũng có thể chạy trực tiếp EXE từ dấu nhắc lệnh (cmd.exe).

+1

Đặt điểm ngắt tại câu lệnh trả về, tôi không biết tìm giao diện điều khiển ở đâu. Khi nhấn Ctrl + F5, chế độ xem Đầu ra vẫn trống, nhưng khi tôi chỉ sử dụng F5, đầu ra hiển thị nhật ký xây dựng và nhật ký gỡ lỗi, với nó chứa: http://pastebin.com/UKWpCKsD Làm tất cả các lỗi PDB phát một vai trò trong điều này? – Qasim

+0

Các lỗi PDB mà bạn thấy không quan trọng. Kiểm tra giá trị trả về của printf. Nó trả về số ký tự đã được in. printf xuất các ký tự trong cửa sổ bảng điều khiển riêng biệt và không xuất hiện trong giao diện đầu ra. – Superman

+0

làm cách nào để có quyền truy cập vào cửa sổ bảng điều khiển riêng biệt? – Qasim

2

Printf thường cần dòng mới để cập nhật bảng điều khiển. Thêm ký tự '\ n' vào cuối và chạy lại chương trình.

+0

Đáng buồn là vẫn không có đầu ra! Tôi tự hỏi điều gì có thể gây ra điều này. Rất ngớ ngẩn. – Qasim

+0

Nếu bạn muốn xóa SDL, printf có hoạt động chính xác không? –

+0

Vẫn không hoạt động. – Qasim

5

Tất cả mọi thứ hoạt động, tôi thậm chí còn hiển thị một hình ảnh lên màn ảnh, nhưng tôi không thể chương trình mà không cần phải cách nọ cách kia để thông điệp đầu ra

Tôi giả định này có nghĩa là bạn có một cửa sổ có sẵn cho bạn, không phải là một giao diện điều khiển.

Nếu bạn muốn đăng nhập một cái gì đó vào cửa sổ đầu ra, sử dụng OutputDebugString:

Gửi một chuỗi các debugger để trưng bày.

void WINAPI OutputDebugString(
    __in_opt LPCTSTR lpOutputString 
); 

Tiêu đềWinBase.h (bao gồm Windows.h)

-2

có một cửa sổ đầu ra của visual studio khi bạn đang chạy/gỡ lỗi chương trình của bạn. Bạn sẽ có thể thấy đầu ra trong cửa sổ đó.

2

Thử xác định NO_STDIO_REDIRECT.

#define NO_STDIO_REDIRECT 

Nếu điều đó không hoạt động, hãy thử giải pháp trong liên kết này: How can I get console output instead of stdout.txt and stderr.txt?.

+1

Chỉ dành cho SDL1.2, không hoạt động đối với SDL2. Khi bạn tìm kiếm mã nguồn cho SDL2, bạn sẽ thấy biểu tượng này không được sử dụng. – Bram

12

Hiển thị các thuộc tính của dự án, chuyển đến liên kết-> system-> hệ thống con và thay đổi nó thành tùy chọn thứ ba, CONSOLE.Điều đó sẽ làm điều đó

7

Trong Linker -> System trong thuộc tính của dự án của bạn, hãy kiểm tra xem Hệ thống con là "Console (/SUBSYSTEM:CONSOLE)".

Điều đó khiến cửa sổ bảng điều khiển riêng biệt được hiển thị khi bạn chạy chương trình của mình. Nếu điểm nhập hiện tại của bạn không phải là chính, thì bạn sẽ cần phải thay đổi nó thành đó nếu bạn làm điều này mặc dù.

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