Thread: Finished my homework on cat

  1. #1
    Registered User
    Join Date
    Sep 2017
    Posts
    93

    Finished my homework on cat

    I made a cat which takes option flag input as well. It's fairly basic and pretty poor performance.

    I only have one minor bug that I can find. If using the "-e" flag and they're multiple newlines in a row, it'll print this as output:

    $

    $

    $

    $
    Instead of just:

    $
    $
    $
    $
    Here's the code:

    Code:
    #include <stdio.h>
    #include <stdint.h>
    #include <string.h>
    #include <unistd.h>
    
    
    int main(int argc, char *argv[]) {
        int8_t FileData, FlagIndicator, sFlag, eFlag, tFlag, seFlag;
        uint64_t NewLineCounter, TabCounter;
        FILE *fp = NULL;
        
        sFlag = eFlag = tFlag = seFlag = 0;
        
        if(argc < 2) {
            fprintf(stderr, "Enter a file name\n");
            return 1;
        }
        
        while((FlagIndicator = getopt(argc, argv, "set")) != -1)
            switch(FlagIndicator) {
                case 's':
                    sFlag = 1;
                    break;
                    
                case 'e':
                    eFlag = 1;
                    break;
                    
                case 't':
                    tFlag = 1;
                    break;
                    
                default:
                    (void)fprintf(stderr, "Usage: [-set] [file...]\n");
                    return 1;
            }
        
        if(sFlag || eFlag || tFlag)
            fp = fopen(argv[2], "r");
        
        else
            fp = fopen(argv[1], "r");
        
        if(sFlag && eFlag)
            seFlag = 1;
        
        if(fp == NULL) {
            fprintf(stderr, "No file found.\n");
            return 1;
        }
        
        FileData = getc(fp);
        
        while(1) {
            if(seFlag) {
                for(NewLineCounter = 0; FileData == '\n'; NewLineCounter++) {
                    if(NewLineCounter < 2)
                        printf("$\n");
                    
                    FileData = getc(fp);
                }
            }
            
            if(sFlag && !seFlag) {
                for(NewLineCounter = 0; FileData == '\n'; NewLineCounter++) {
                    if(NewLineCounter < 2)
                        printf("\n");
                    
                    FileData = getc(fp);
                }
            }
            
            if(eFlag && !seFlag) {
                if(FileData == '\n') {
                    printf("$%c", FileData);
                    
                    FileData = getc(fp);
                }
            }
            
            if(tFlag) {
                for(TabCounter = 0; FileData == '\t'; TabCounter++) {
                    printf("^I");
                    
                    FileData = getc(fp);
                }
            }
            
            if(FileData == EOF)
                break;
            
            printf("%c", FileData);
            
            FileData = getc(fp);
        }
        
        fclose(fp);
        
        return 0;
    }
    Last edited by ImageJPEG; 11-10-2017 at 08:27 PM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Program almost finished
    By alex1067 in forum C Programming
    Replies: 3
    Last Post: 04-05-2008, 10:03 PM
  2. Finished C++ 1
    By sonict in forum C++ Programming
    Replies: 15
    Last Post: 01-26-2003, 04:47 AM
  3. Finished!
    By Kyoto Oshiro in forum C++ Programming
    Replies: 22
    Last Post: 07-21-2002, 01:40 PM
  4. Finished
    By Kavity in forum Game Programming
    Replies: 4
    Last Post: 08-26-2001, 08:17 PM
  5. Finished
    By Kavity in forum C++ Programming
    Replies: 1
    Last Post: 08-26-2001, 11:59 AM

Tags for this Thread