Just a little exercise to make me more affluent with strings and error handling, any improvements welcome!
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>
#include <math.h>
#define MAXSIZE 1024
void retreiveStringInput(char *str, size_t buffersize)
{
for (;;) {
if (fgets(str, buffersize, stdin) != NULL) {
str[strcspn(str, "\n")] = 0;
return;
}
else
printf("Touble allocating memory, Please try again...\n");
}
}
bool strHasAllDigits(char *str)
{
size_t strsize = strlen(str);
if (str[0] != 0) {
for (size_t strIndex = 0; strIndex < strsize; ++strIndex) {
if (isdigit(str[strIndex]))
continue;
else
return false;
}
return true;
}
else {
printf("String is empty...\n");
return false;
}
}
int strToInt(char str[])
{
size_t len = strlen(str);
size_t power = len - 1;
int convertedString = 0;
for (size_t strIndex = 0; strIndex < len; ++strIndex, --power) {
convertedString += ((int)(str[strIndex] - '0') * pow(10,power));
}
return convertedString;
}
int main()
{
char number[MAXSIZE];
int intNumber = 0;
for (;;) {
printf("ENTER A WHOLE NUMBER: ");
retreiveStringInput(number, MAXSIZE);
if (strHasAllDigits(number))
intNumber = strToInt(number);
else {
printf("Number must be a whole number containing no characters, please try again...\n\n");
continue;
}
printf("Your number is: %d\n", intNumber);
break;
}
printf("Press any key to continue...");
getchar();
}