Presentation is loading. Please wait.

Presentation is loading. Please wait.

Topic 13 – Various Other Topics. Enumerated Types.

Similar presentations


Presentation on theme: "Topic 13 – Various Other Topics. Enumerated Types."— Presentation transcript:

1 Topic 13 – Various Other Topics

2 Enumerated Types

3 CISC105 – Topic 13 Enumerated Types We have seen a way to construct new datatypes that are composed of a combination of other datatypes. This is called a structure. The C language also allows the creation of new datatypes that are “simple” datatypes, similar to int s, char s, etc…

4 CISC105 – Topic 13 Enumerated Types An enumerated type is a datatype with its own, programmer-defined, list of possible values. This is useful when a datatype is necessary that can have one of a set of some possible values. An an example, consider a new datatype for the manufacturer of cars.

5 CISC105 – Topic 13 Enumerated Types This datatype definition could look like: typedef enum { GM, Honda, Ford, Nissan, Toyota, Chrysler } automaker; This definition defines a new datatype, automaker. A variable of this datatype can have any of the six values listed in the definition.

6 CISC105 – Topic 13 Enumerated Types This definition goes in the same location in a C file as a structure definition, before the function prototypes. Once this definition is present, any function is free to declare variables of this new datatype. typedef enum { GM, Honda, Ford, Nissan, Toyota, Chrysler } automaker;

7 CISC105 – Topic 13 Enumerated Types This allows us to use a variable of this new datatype in the same ways as a variable of other datatypes: automaker car1, car2 = Ford; car1 = Nissan; if (car1 == Nissan) printf(“It’s a Nissan!”); if (car2 == Ford) printf(“It’s a Ford!”);

8 CISC105 – Topic 13 Enumerated Types So, why is this called an enumerated type? The computer does not know what a “Ford” is. Therefore, the enumerated type definition uses integers that correspond to the enumerated values.

9 CISC105 – Topic 13 Enumerated Types Thus, GM has a value of 0, Honda has a value of 1, Ford has a value of 2, Nissan has a value of 3, Toyota has a value of 4, and Chrysler has a value of 5. typedef enum { GM, Honda, Ford, Nissan, Toyota, Chrysler } automaker;

10 CISC105 – Topic 13 Enumerated Types We can see that GM (0) is less than Honda (1), which is less than Ford (2), etc… Thus, we know that (for example): Honda < Chrysler Ford != Nissan Toyota >= GM typedef enum { GM, Honda, Ford, Nissan, Toyota, Chrysler } automaker;

11 CISC105 – Topic 13 A Further Example void display_carmake(automaker carmake) { switch (carmake) { case GM: printf(“The make is GM.”); break; case Honda: printf(“The make is Honda.”); break; case Ford: printf(“This make is Ford.”); break; case Nissan: printf(“The make is Nissan.”); break; case Toyota: printf(“The make is Toyota.”); break; default: printf(“The make is Chrysler”); }

12 Text File Input/Output

13 CISC105 – Topic 13 Input Redirection We have previously seen how to use a text file to substitute for user input in a program (batch mode). The program still expects input using scanf statements. The text file must contain one value for each value expected in the program. This is done using the input redirection operator at the UNIX (or Windows) prompt: a.out < input_data

14 CISC105 – Topic 13 Input Redirection It is important to realize that the program has no knowledge it will be receiving its input data from a file. This operator simply instructs the operating system to change where the standard input device is. It replaces the normal input device (the keyboard) with the file specified. Thus, when the scanf statement attempts to read data from the standard input device, it reads from the file instead of the keyboard.

15 CISC105 – Topic 13 Program-Controlled File I/O It is possible to write a C program such that it directly works with a file, instead of altering the standard input device. The first thing that must be done is to declare a file pointer variable. This is a variable that stores the information necessary to access a file. File pointers are of type FILE *.

16 CISC105 – Topic 13 Program-Controlled File I/O One file pointer is required for each file that will be accessed. Once a file pointer has been declared, it must be assigned to a file and that file must be opened. This is done using a fopen function call. This function takes two parameters, a string with the file name, and a string with the type of access desired (such as read, write, etc…)

17 CISC105 – Topic 13 Program-Controlled File I/O Once the file is opened, it can be accessed by using the file pointer associated with it. FILE *inp, *outp; inp = fopen(“datafile”,”r”); outp = fopen(“output”,”w”); Here, the file pointers are declared. They are not yet associated with any file. Here, the file “datafile” is opened for read (“r”) access. A pointer to this file is assigned to input_file. Note that we can use this file pointer to READ the file only! Here, the file “output” is opened for write (“w”) access. A pointer to this file is assigned to output_file. Note that we can use this file pointer to WRITE the file only!

18 CISC105 – Topic 13 Errors in Opening Files When the operating system is unable to open a file, for whatever reason, the pointer returned (the file pointer) is set to NULL. Thus, to see if a file is opened successfully, test the file pointer to see if it is NULL after the call to fopen.

19 CISC105 – Topic 13 Errors in Opening Files FILE *inp, *outp; inp = fopen(“input_file”,”r”); outp = fopen(“output_file”,”w”); if (inp == NULL || outp == NULL) printf(“Error opening one of the files.”); else { /* files were both opened correctly and we can access them */ }

20 CISC105 – Topic 13 File Input Once the file pointer is ready, input from a file opened with “read” access can be performed using the fscanf function. This function works just like scanf except that it takes one additional parameter, the file pointer: fscanf(inp,”%d”,&x);

21 CISC105 – Topic 13 Closing File Pointers Once all access to an open file is completed, the file must be closed. This is done with a call to fclose, which takes one parameter, the name of the file pointer that controls the file the program has finished accessing.

22 CISC105 – Topic 13 Closing File Pointers FILE *inp, *outp; inp = fopen(“input_file”,”r”); outp = fopen(“output_file”,”w”); if (inp == NULL || outp == NULL) printf(“Error opening one of the files.”); else { /* do something with files! */ fclose(inp); fclose(outp); }

23 CISC105 – Topic 13 File Input Using this syntax has the same effect as using scanf and redirecting the input using the “<“ operator. The file that is being read must contain the data the program is expecting, and it must be in order. In addition to fscanf, there is also the fgets function which reads in an entire line from the file and stores that line in a string variable.

24 CISC105 – Topic 13 File Input fgets takes three parameters, the string to store the line being read, a maximum number of characters to read in, and the file pointer to read from. This second parameter can be used to prevent an overflow of the string. As an example,

25 CISC105 – Topic 13 File Input This last statement reads in a line from the file that inp points to, input_file. It stores the first 19 characters in the string buffer. FILE * inp; char buffer[20]; inp = fopen(“input_file”,”r”); fgets(buffer,19,inp);

26 CISC105 – Topic 13 File Output Just like we can read from a file that has been opened with read access, we can write to a file that has been opened with write access. This is done with the fprintf function. This function behaves just like printf except it takes one addition parameter, the file pointer to write to.

27 CISC105 – Topic 13 File Output What does this call to fprintf do? FILE * outp; int linenum = 1; outp = fopen(“output_file”,”w”); fprintf(outp,“This string will go as the %d st line in the file.”, linenum); It outputs the string “This string will go as the 1 st line in the file.” to the file pointed to by outp, output_file. Since this happens immediately after the program opens the file for writing, this string will be the 1 st line of the file, output_file.


Download ppt "Topic 13 – Various Other Topics. Enumerated Types."

Similar presentations


Ads by Google