Input within a time limit in Standard C

后端 未结 2 1979
野性不改
野性不改 2021-01-13 23:18

I\'m currently doing my assignment and it\'s compulsory to use C-Free 5.0. Just need your help to solve this piece of puzzle. I want to implement a time limit for the user t

2条回答
  •  盖世英雄少女心
    2021-01-13 23:55

    Since you have fcntl.h try setting stdin to non-blocking. It's not pretty (active waiting), but if you do not have select then this is the easyest way to go:

    #include  
    #include 
    #include 
    #include 
    #include 
    #include 
    
    int main()
    {
        // get stdin flags
        int flags = fcntl(0, F_GETFL, 0);
        if (flags == -1) {
            // fcntl unsupported
            perror("fcntl");
            return -1;
        }
    
        // set stdin to non-blocking
        flags |= O_NONBLOCK;
        if(fcntl(0, F_SETFL, flags) == -1) {
            // fcntl unsupported
            perror("fcntl");
            return -1;
        }
    
        char st[1024] = {0}; // initialize the first character in the buffer, this is generally good practice
        printf ("Please enter a line of text : ");
        time_t end = time(0) + 5; //5 seconds time limit.
    
        // while
        while(time(0) < end  // not timed out
            && scanf("%s", st) < 1 // not read a word
            && errno == EAGAIN); // no error, but would block
    
        if (st[0]) // if the buffer contains something
            printf ("Thank you, you entered >%s<\n", st);
    
        return 0;
    }
    

    A remark to your code: if (st != NULL) will always be satisfied since st is a stack pointer.

提交回复
热议问题