Number searcher (needs refactor)

Run Settings
LanguageC
Language Version
Run Command
#include <stdio.h> typedef struct number number; struct number { double d; int i; int isDouble; int isFound; }; number findNextNumber(char *string) { static char *startPtr; number num = {0, 0, 0, 0}; if (!string && !startPtr) return num; if (string) startPtr = string; if (!startPtr[0]) return num; char currentChar; while(startPtr[0] && sscanf(startPtr, "%[^-.0-9]c", &currentChar)) { startPtr++; } int numLength = 0; int isDouble = 0; int isNegative = 0; while(startPtr[0] && sscanf(startPtr, "%[-.0-9]c", &currentChar)) { if (currentChar == '-') { if (numLength > 0) { startPtr--; break; } isNegative = 1; } if (currentChar == '.') { if (isDouble) { startPtr--; break; } isDouble = 1; } numLength++; startPtr++; } if (isNegative && numLength == 1) return num; if (numLength == 0) return num; char format[128]; sprintf( format, isDouble ? "%%%dlf" : "%%%dd", numLength ); num.isDouble = isDouble; sscanf( startPtr - numLength, format, isDouble ? &num.d : &num.i ); num.isFound = 1; return num; } void printNum(number num) { if (!num.isFound) { printf("Not found\n"); return; } if (num.isDouble) { printf("%lf\n", num.d); } else { printf("%d\n", num.i); } } int main(void) { char* str = "abc123def-456ghi3.1459jkl-9999.999mnop"; number num = findNextNumber(str); printNum(num); while (num.isFound) { num = findNextNumber(0); printNum(num); } return 0; }
Editor Settings
Theme
Key bindings
Full width
Lines