# I/O Redirection in Xcode

• Similarly to how we can redirect input and output in Terminal (described here) with

./hello < input.txt > output.txt

we can redirect input and output in Xcode.

## Setting Working Directory

• First, set the custom working directory for the project.

• From the menu bar, select Product > Scheme > Edit Scheme. Then choose Run (on the left) and Options (at the top) and set the custom working directory to where your input files are located. This will make Xcode look for input files in the correct folder, instead of the directory where it stores the project’s executable.

## Input Redirection

• If you don’t want to manually type or copy and paste input into the console, you can redirect input from a file.

• Add this line of code at the beginning of main to redirect input from input.txt to cin (standard input stream).

freopen("input.txt", "r", stdin);

Don’t forget to comment this line out before you submit!

## Output Redirection

• If you’d like to redirect output for cout (standard output stream) and cerr (standard error stream) to a file, add these line of code at the beginning of main:

freopen("output.txt", "w", stdout);
freopen("error-output.txt", "w", stderr);

Don’t forget to comment this line out before you submit!

## Conditional Compilation

• You can add a condition statement to include the lines of code that call freopen only if you are compiling on macOS:

#ifdef __APPLE__
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
freopen("error-output.txt", "w", stderr);
#endif

This way, you don’t have to worry about commenting out these lines of code before submitting.