I need to write a C program that will implement the basic operations of table processors. The input will be text data read from a *.txt* file, operations will be defined using terminal arguments, and the output will be in a *.txt* file as well. Program should be run the following way: ./main [-d delimiter] [name of the function for the table] <in.txt >out.txt Where the `-d` argument determines which symbols can be interpreted as separators of single cells, by default the `delimiter` is a space character. Multiple cases of the same sign in the delimiter are ignored. The first sign in the delimiter character will be used as the separator of output values. `name of the function` is the identifier of the function that will be called to perform certain tasks on the table. `<in.txt` redirects reading from stdin to reading from *in.txt*, `>out.txt` redirects outputting to stdout to outputting to `out.txt`. Here's what I wrote: #include <stdio.h> #include <string.h> int main(int argc, char* argv[]) { if((argc > 2) && (strcmp(argv[1], "-d") == 0)) { char delim = *argv[2]; for (int i; (i = getchar()) != EOF; ) { if(i == '\n') putchar(i); if(!((i >= '0' && i <= '9') || (i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z')) ){ putchar(delim); continue; } putchar(i); } } else if((argc == 2) && strcmp(argv[1], "-d") == 0) { char delim = ' '; for (int i; (i = getchar()) != EOF; ) { if(i == '\n') putchar(i); if(!((i >= '0' && i <= '9') || (i >= 'a' && i <= 'z') || (i >= 'A' && i <= 'Z')) ){ putchar(delim); continue; } putchar(i); } } return 0; } The code works and does what it's supposed to, but I am not sure about the effectivity of the implementation. The requirements are: input table can't be an empty file, maximum length of a row (both input & output) is 10KiB, otherwise an error message should be shown. Using global variables isn't allowed, preprocessor macro `#define` is. Functions for working with files and dynamic memory allocation aren't allowed as well. What are the ways to change my code?