Jeg har ikke afprøvet dem her, det er bare en løsning jeg sådan lige har lavet i tankerne, så du må selv lige teste dem. Bemærk... Jeg ved ikke om du bruger C eller C++, så jeg har lavet det med C++'s new-operator, som du lige må ændre til en malloc hvis du bruger C. Desuden... Husk nu lige at du selv er nødt til at deallokere det char-array som bliver allokeret i IntToChar
bool char_to_int (const char string[], int *pres) { if (pres == NULL || string == NULL) return false; else if (string[0] == 0) return false; else { if (sscanf(string, "%i", pres) != 1) return false; else return true; } }
void main () { char buffer[1024]; int res; if (gets(buffer) == NULL || !char_to_int(buffer, &res)) puts("You must enter a number"); else printf("You entered %i\n", res); }
Eller på den anden side set... 1'eren er jo kun en warning, så det er ikke engang sikkert det er derfor, for jeg skulle da mene det burde give en fejl (ikke en warning)
Det er ikke derfor, da jeg har min funktion og står helt oppe i toppen og først kalder den nede til sidst... Men mit program virker og da det kun er øvelse er det ikke så vigtigt. Det kan være jeg ser fejlen når jeg ser på programmet igen.
Jeg har faktisk ikke så meget styr på ANSI C (Er også mest til C++), men jeg lavede da alligevel lidt søgninger på nettet, for at finde ud af hvad advarslen går ud på, og jeg har da fået en lille mistanke, der kunne være værd at undersøge.
Prøv engang at give funktionen en prototype alligevel, tror det er noget med at ANSI C helst vil have både prototype og definition, vist nok noget dobbeltsikkerhed, men jeg er ikke helt sikker, men prøv at læse det her news indlæg:
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.