Handling user input - follow-up Original code: Getting name from user, and handling any errors in C

I fixed the bugs. Is there anything else to consider?

#include "stdafx.h"
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;ctype.h&gt;
#include &lt;stdbool.h&gt;

#define BUFFSIZE 10

/*Checks to see if name contains actual characters and not just whitespace*/
bool hasAlpha(unsigned const char * name, size_t buffersize)
{
    for (size_t index = 0; index &lt; buffersize &amp;&amp; name[0] != '\0' ; ++index) {
        if (isalpha(name[index])) 
            return true;
    }

    return false;
}

/* @param[nlcspan], Used to determine if newline char was in C string or not */
/* @param[incomplete], If true, new line character is still in the buffer i.e. need to clear buffer*/


void retrieveName(unsigned char* name, size_t buffersize)
{
    for (;;) {
        if (fgets(name, buffersize, stdin) != NULL) {
            size_t nlcspn = strcspn(name, "\n");
            bool incomplete = name[nlcspn] == 0;
            name[nlcspn] = 0;
            if (incomplete) {
                int bufferclear;
                while ((bufferclear = getchar()) != '\n' &amp;&amp; bufferclear != EOF);
            }
            if (name[0] == '\0' || !hasAlpha(name, buffersize)) {
                printf("Invalid name entered please try again...\n"
                       "USER NOTE: name cannot be empty and must contain at least one char\n");
            }
            else {
                return;
            }
        }
        else
            printf("Memory could not be allocated please try again...\n");
    }
}

int main(void)
{
    size_t len = BUFFSIZE;
    unsigned char name[BUFFSIZE];

    printf("Enter Name: ");
    retrieveName(name, len);
    printf("Your name is: %s\n", name);

    printf("Enter Name: ");
    retrieveName(name, len);
    printf("Your name is: %s\n", name);

    printf("Press enter to continue...\n");
    getchar();

    return 0;
}
BUGS
The function retrieveName() is doing the input of the name twice.

        if (fgets(name, buffersize, stdin) != NULL) {
            size_t nlcspn = strcspn(name, "\n");
            bool incomplete = name[nlcspn] == 0;
            name[nlcspn] = 0;
            if (incomplete) {                    int bufferclear;
                while ((bufferclear = getchar()) != '\n' &amp;&amp; bufferclear != EOF);
            }
            if (name[0] == '\0' || !hasAlpha(name, buffersize)) {
                printf("Invalid name entered please try again...\n"
                       "USER NOTE: name cannot be empty and must contain at least one char\n");
            }
            else {
                return;
            }


Both fgets() and getchar() are getting input from stdin. The search you are
performing for end of line is failing because bufferclear should be EOF on the
first execution of the loop. What you should be doing is a search for end of line
on name.

Keep it Simple
Since you are reading from stdin, use gets() rather than fgets(), gets() has
the same semantics as fgets() but only reads from stdin. If you want 
retrieveName() to be able to read from any file you should add another parameter
this is either the file name or a FILE pointer. If it is the file name than
retrieveName() will need to perform a fopen().

There is a software engineering/programming principle call KISS, or Keep it Simple. 
_principle
The simpler you make the code the easier it is to write, maintain and debug. 

Alignment
If name is going to be used in a struct at some point in the future, you should
consider the alignment of the fields in the struct to make the most efficient use
of memory. Computers implement strings in words of memory. A word is some power
of two bytes long, in the past this has been either 2 or 4 bytes, most computers
and compilers are going to use 8 bytes these days in a 64 bit architecture. 
Therefore BUFFSIZE should be some multiple of 8 (8, 16, 24, 32). I'd suggest
as a minimum 16 because 8 may be too small.

Use Functions or Loops for Repetitive Code
In software engineering there is a programming principle called Don't Repeat Yourself. 
Any time you have repeating code such as :

    printf("Enter Name: ");
    retrieveName(name, len);
    printf("Your name is: %s\n", name);


in main() you should consider either creating a loop or writing a function.
Generally I would recommend writing a function, but in this case a loop will
do just as well.