2012-11-08 48 views
6

Tôi mới sử dụng các khối mã và tôi dường như không làm cho nó hoạt động với các đối số dòng lệnh của đầu vào <> đầu ra. Có ai biết làm thế nào để?Các khối mã chuyển hướng đầu ra đầu vào

Hiện tại tôi có thể đọc tệp được chuyển từ argv [1] nhưng chương trình không tự động đọc đầu vào từ tệp đã cho cũng như không xuất kết quả đầu ra tệp.

Tôi biết nó là trên lý lẽ bộ chương trình, dòng tranh luận của tôi là: list.txt < input> đầu ra

Sau khi một số nghiên cứu, tôi thấy một anh chàng làm việc đó như thế này: < ./input> ./ đầu ra, có vẻ như chạy một chương trình để cung cấp cho đầu vào và đầu ra, anyways, tôi cũng đã cố gắng mà không có avail. Tôi có cần sử dụng trình xử lý tệp để tương tác với nó không? Nó không làm cho sence, getchar đơn giản() nên đọc từ các tập tin đầu vào đi qua.

Tôi thiếu gì ở đây?

Cảm ơn trước

+1

Việc này chỉ chuyển hướng đầu vào và đầu ra tiêu chuẩn. Sử dụng 'printf()' và 'scanf()', 'puts()' và 'getline()', v.v. nên được sử dụng tốt. –

+0

Nó vẫn không hoạt động: (Tôi đã thay đổi getchar() để có được như tôi muốn toàn bộ dòng, bây giờ tôi nhận char char trong chuỗi nhưng, khi tôi chạy nó, nó vẫn chờ đợi cho đầu vào bằng tay. – d0pe

+0

Không, nó không phải là một vấn đề codeblocks bởi bất kỳ phương tiện, bạn đang thiếu một cái gì đó ... Hãy tưởng tượng, một IDE có thể làm gì? Nó không phải là một trình biên dịch ... –

Trả lời

5

Tôi đã làm việc với Code :: Blocks trong một thời gian bây giờ và chỉ gần đây ghi nhận cùng ít nhất là với Code :: Blocks 12,11 trong Windows. Các chuyển hướng >< không làm việc trong các dự án -> Cài chương trình luận ...

Một giải pháp hackish là để làm thực hiện trong giai đoạn hậu xây dựng bước.

Nhấp chuột phải project name -> Build options... -> Pre/post build steps -> Post-build steps:

cmd /C cd /D "bin\$(TARGET_NAME)\" & YourApplicationNameHere.exe >output.txt 2>errors.txt 

Và kiểm tra hộp kiểm Luôn thực hiện, ngay cả khi mục tiêu là up-to-date. Bây giờ, hãy nhấn Ctrl + F9 và chương trình được thực hiện như là bước cuối cùng của quá trình xây dựng.

7

tôi đã tìm ra cách làm thế nào để làm điều đó trong CB 13,12

Tools -> Configure Tools -> Add: 

Name: whatever 
Executable: C:\Windows\System32\cmd.exe 
Parameters: /C ${TARGET_OUTPUT_BASENAME} exampleArg1 <inputFileRedirect.txt 
Working Directory: ${TARGET_OUTPUT_DIR} 

Nó về cơ bản ra mắt cửa sổ giao diện điều khiển và truyền thông số với nó. Bạn cũng có thể gán các phím tắt cho các công cụ này. Những bất lợi duy nhất tôi có thể thấy là các công cụ không phải là dự án cụ thể.

+0

Cảm ơn bạn đây là người duy nhất làm việc Windows – CodeMonkey

1

Tôi nghĩ rằng đó là vấn đề của cb_console_runner.exe mà ra mắt chương trình của bạn trong IDE. ConsoleRunner không thể diễn giải biểu tượng chuyển hướng. Vì vậy, tôi thêm một số mã vào mã ban đầu của codeblocks 13.12. Vui lòng sao chép tệp được liên kết vào [thư mục cb]. (Đừng quên back-up bản gốc.)

nhị phân: http://limity.tistory.com/attachment/[email protected]

mã nguồn: http://limity.tistory.com/attachment/[email protected]

1

tôi đã có thể để có được đầu vào chuyển hướng đến chương trình c của tôi bằng cách thiết lập tham số chương trình trong dự án thực đơn.

Điều hướng đến Top Menu>Project>Set programs' arguments và đặt </absolute/path/to/yourinputfile thông báo < khi bắt đầu thủ thuật mã hóa vào tệp chuyển hướng thay vì đối số truyền.

enter image description here

+0

Đã thử với Code :: Blocks 16.01 nhưng điều này không làm việc vì nó dẫn đến gọi là "Executing:" C: \ Program Files (x86) \ CodeBlocks/cb_console_runner.exe "" C: \ Work \ cpp \ cout \ cout. exe " Vadzim

+1

phương pháp này chỉ hoạt động trên linux –

0

tôi đã cố gắng gần như tất cả các tùy chọn & thất bại trong việc làm cho nó hoạt: P Sau khi trở nên chán nản với tất cả những gì, tôi về cơ bản sử dụng xử lý tập tin để có được công việc của tôi được thực hiện (phew)

đây là những gì tôi đã làm trong mã

tại phạm vi toàn cầu, tôi đã viết:

#define DEBUG 

#ifdef DEBUG 
#include<fstream> 

ifstream Inputfile; 
ofstream Outputfile; 

#define cin  Inputfile 
#define cout Outputfile 

#endif //#ifdef DEBUG 

& trong chính tôi đã viết như sau trước khi làm bất cứ điều gì khác:

int main(){ 
#ifdef DEBUG 

    Inputfile.open("Input.txt"); 
    Outputfile.open("Output.txt");; 

#endif // #ifdef DEBUG 

Cuối cùng ngay trước khi bế mạc quá trình chính đã làm điều này:

#ifdef DEBUG 

    Inputfile.close(); 
    Outputfile.close(); 

#endif // #ifdef DEBUG 

Sau này bổ sung thêm hai file

INPUT.TXT

&

output.txt

cho dự án

này làm việc như mong đợi

0

Tôi biết đây là một chủ đề cũ, nhưng không ai trong số các giải pháp là đủ tốt. Đối với Windows, tôi có lẽ sẽ đi với các định nghĩa vĩ mô sau (như bạn có thể cần nó còn cho in debug hoặc tương tự) ở phạm vi toàn cầu

#include <cstdio> 
#ifdef DEBUG 
    #define D(X) X 
#else 
    #define D(X) 
#endif 

Sau đó là dòng đầu tiên hoặc thứ hai (nếu bạn cần std :: ios :: sync_with_stdio (false);) sử dụng chính nó như

int main() { 
    D(freopen("input.txt","r",stdin);) 
    D(freopen("ouput.txt","w",stdout);) 
    ... 

Và xác định trong Code :: Blocks dưới Projects> Build Options ...> (Debug, biên dịch Settings, # định nghĩa)

DEBUG

Mong rằng "input.txt" là tệp nhập văn bản trong thư mục có phần còn lại của tệp .c hoặc .cpp, và "output.txt" sẽ là tệp đầu ra được tạo trong cùng một thư mục (hoặc chúng có thể được thêm vào dự án như các tệp như vậy để chỉnh sửa/xem dễ dàng hơn).

Giải pháp này sẽ hoạt động với cả cin/cout và scanf/printf.

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