Hogyan tudnám leellenőrizni C-ben hogy a bekért érték megfelelő formátumú e?





#include <stdio.h>
void teszt(char *s)
{
int n = 0;
int rossz = 0;
char *p = s;
while (*p) {
if (*p == ';') n++;
else if (*p < '0' || *p > '9') {
rossz = 1;
break;
}
p++;
}
printf("%s\t%s\n", s, rossz || n > 1 ? "invalid input" : "OK");
}
int main()
{
teszt("123;12"); // jo
teszt("123;bela"); // nem szam
teszt("123;12;3"); // harom pontos vesszo
teszt("123; 12"); // rossz mert szokoz van benne
}





Egy kicsit javitott valtozat:
#include <stdio.h>
void teszt(char *s)
{
int n = 0;
int rossz = 0;
char *p = s;
while (*p) {
if (*p == ';') n++;
else if (*p < '0' || *p > '9') {
rossz = 1;
break;
}
p++;
}
printf("%s\t%s\n", s, rossz || n != 1 ? "invalid input" : "OK");
}
int main()
{
teszt("12312"); // nincs benne pontosvesszo
teszt("123;12"); // jo
teszt("123;bela"); // nem szam
teszt("123;12;3"); // harom pontos vesszo
teszt("123; 12"); // rossz mert szokoz van benne
}





Viszont meg igy van benne nem kezelt lehetoseg, peldaul:
teszt(";");
teszt("123;");
teszt(";12");
Ezekre is azt irja ki hogy 'OK', amikor az egyik szam nincs megadva... ehhez mar atkene irni az egesz algooritmust.. lusta vagyok :D





Na, talan igy:
#include <stdio.h>
void teszt(char *s)
{
char *p = s;
int n = 0;
int betuk[2] = { 0, 0 };
while (*p) {
if (*p == ';') {
if (++n > 1) break;
} else if (*p >= '0' && *p <= '9') {
betuk[n]++;
} else break;
p++;
}
printf("%s\t%s\n", s, !betuk[0] || !betuk[1] || n != 1 ? "invalid input" : "OK");
}
int main()
{
teszt(";"); // nincs benne szam
teszt("123;"); // csak egy szam van
teszt(";12"); // csak egy szam van benne
teszt("12312"); // nincs benne pontosvesszo
teszt("123;12"); // jo
teszt("123;bela"); // nem szam
teszt("123;12;3"); // harom pontos vesszo
teszt("123; 12"); // rossz mert szokoz van benne
}





Hihetetlen de talaltam meg egy esetet amikor hibas input-ra azt irja ki hogy OK, ez pedig:
teszt("123;12a");
Kicsit modositott valtozat, ez mar szerintem bombabiztos, de ha valaki megis talal kivetelt szolaljon fel:
#include <stdio.h>
void teszt(char *s)
{
char *p = s;
int n = 0;
int betuk[2] = { 0, 0 };
while (*p) {
if (*p == ';') {
if (++n > 1) break;
} else if (*p >= '0' && *p <= '9') {
betuk[n]++;
} else {
betuk[n] = 0;
break;
}
p++;
}
printf("%s\t%s\n", s, !betuk[0] || !betuk[1] || n != 1 ? "invalid input" : "OK");
}
int main()
{
teszt(";"); // nincs benne szam
teszt("123;"); // csak egy szam van
teszt(";12"); // csak egy szam van benne
teszt("12312"); // nincs benne pontosvesszo
teszt("123;12"); // jo
teszt("123;bela"); // nem szam
teszt("123;12;3"); // harom pontos vesszo
teszt("123; 12"); // rossz mert szokoz van benne
teszt("123;12a"); // rossz betu van benne
}
Feladat: megertsd hogy mukodik :D















Így ni: http://pastebin(PONT)com/xKuiwcYZ
Kell a csudát ehhez regexp, ilyen pársoros feladatokhoz teljesen fölösleges, ilyen egyszerű ellenőrzések esetében ráadásul sokkal gyorsabb, ha magad írod meg, továbbá nem függsz egy regexp függvénykönyvtártól.










Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!