kmikael
kmikael

Reputation: 5002

Question about K&R - redirect input

In section 1.6 of 'The C Programming Language' (K&R) there is an example program and the authors state:

The output of this program ON ITSELF is
    digits = 9 3 0 0 0 0 0 0 0 1, white space = 123, other = 345

Then there are many similar programs etc. including exercises. I understand everything about the logic of the code and can do the exercises, but how do I actually test my program on a file like the authors or many others on the web?

Edit: The question should be: How can I redirect the input of a file to the program?

Upvotes: 2

Views: 310

Answers (3)

Andrew Rasmussen
Andrew Rasmussen

Reputation: 15099

By default, your program will take input from stdin, which is a buffer which is filled based on input from your keyboard (by default). However, you can also tell your program to fill stdin from a text file instead.

Using a *nix based system, you can simply create a text file, and save it as whatever you'd like, "test_input" for instance. Fill it with the input that you'd like to pass to your program, save it, and then run your program like this:

./a.out < test_input

This is called redirection because you are "redirecting" (if you will) the input to come from a file, rather than the default (keyboard). It goes both ways, you can also redirect your output to a file, rather than stdout with the other angle bracket, '>'.

Using Visual Studio, and not popping open a command prompt to do something like the command above, you can use a C++ ifstream, put the text file in the local directory, and then simply use the ifstream everywhere instead of stdin:

ifstream sin("test_input.txt" , ifstream::in);
int value;
sin >> value;

You can output to a file using an ofstream.

Note that ifstreams and ofstreams are C++ objects, and can't be used in C. While you can write to files and read from files in C, it's a little trickier than simply replacing all instances of cout and cin. You actually have to think about what you are reading and writing :)

Upvotes: 2

QuentinUK
QuentinUK

Reputation: 3077

This is using re-direction. Instead of the input to the program coming from the keyboard it comes from a file.

At the DOS prompt:-

C:>myexe < filename

Get to the DOS prompt in Windows use the command shell. Or start Run.. and enter cmd

On a Mac this is called terminal (type "terminal" into Searchlight to get to it).

Upvotes: 2

nos
nos

Reputation: 229108

The program in chapter 1.6 reads input from stdin. To make it read from a file, you can (on most operating systems) redirect stdin to be a file by running your program like this:

myprogram < somefile

Or you can pipe the content of a file to it like so:

cat somefile | myprogram

On windows, you'd use the type program instead of cat,

type somefile | myprogram

Upvotes: 4

Related Questions