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 <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
#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 < buffersize && 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' && 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;
}