Kezdőoldal » Számítástechnika » Programozás » Hogyan tudnám leellenőrizni...

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

Figyelt kérdés
Be kell kérnem X és Y változót, ami ha nem X;Y formátumban adtak meg akkor ki kell lépni "invalid imput"-al. És akkor is ki kell lépni ha egynél több ; jel van benne. Segítségeteket előre is köszönöm.
2015. okt. 17. 13:26
1 2
 1/12 anonim ***** válasza:

#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

}

2015. okt. 17. 13:37
Hasznos számodra ez a válasz?
 2/12 anonim ***** válasza:

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

}

2015. okt. 17. 13:39
Hasznos számodra ez a válasz?
 3/12 anonim ***** válasza:

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

2015. okt. 17. 13:41
Hasznos számodra ez a válasz?
 4/12 anonim ***** válasza:

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

}

2015. okt. 17. 13:52
Hasznos számodra ez a válasz?
 5/12 anonim ***** válasza:

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

2015. okt. 17. 14:02
Hasznos számodra ez a válasz?
 6/12 anonim ***** válasza:
Nem látom hogy írta volna a kérdező hogy csak szám lehet az X és Y, ha már szám akkor hol marad a negatív és a tizedestört?
2015. okt. 17. 17:15
Hasznos számodra ez a válasz?
 7/12 anonim ***** válasza:
Ez tipikusan olyan feladat ahova a regex lenne a legmegfelelőbb.
2015. okt. 17. 19:25
Hasznos számodra ez a válasz?
 8/12 anonim ***** válasza:

Í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.

2015. okt. 17. 19:55
Hasznos számodra ez a válasz?
 9/12 anonim ***** válasza:
A gyorsaságot a futásidőre értettem, azt elfelejtettem odaírni.
2015. okt. 17. 19:56
Hasznos számodra ez a válasz?
 10/12 anonim ***** válasza:
Konzolról való bemenetnél aztán nagyon számít a futási idő. A regexet nem konkrétan C nyelv alkalmazására értettem, hanem olyan nyelvre ahol alapból van, ott ilyen feladatra az jobb.
2015. okt. 17. 20:08
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!