Sprawdzanie poprawności wpisania daty

0

Witam. Funkcja ma zwrócić:
true, gdy data jest wpisana poprawnie, czyli według formatu rrrr-mm-dd
false, wiadomo

Zmienna data jest tablicą znaków.

bool SprawdzDate(){
	int dl_daty=strlen(data);
	if(dl_daty!=10)	
		return false; 
		
	int i;
	for(i=0; i<10; i++){
		if((i==4)||(i==7))
			if(data[i]!='-')
				return false;
		else{
			if((=data[i]<'0')||(data[i]>'9'))
				return false;
		}
	}
	
	return true;
	
} 

W funkcji brak argumentów, ponieważ zmienne są globalne. Z resztą chodzi mi tylko o poprawność kodu funkcji.

0

tak na oko poprawiłem (klamerek brakowało, bo ten else liczył się do drugiego ifa, nie pierwszego jak myślałeś, zresztą kompilator powinien ostrzec o tym)

bool SprawdzDate(){
    int dl_daty=strlen(data);
    if(dl_daty!=10)    
        return false; 
    
    int i;
    for(i=0; i<10; i++){
        if((i==4)||(i==7)) {
            if(data[i]!='-')
                return false;
        }
        else {
            if((data[i]<'0')||(data[i]>'9'))
                return false;
        }
    }
 
    return true;
 
} 
1

Przecież kompilator wyraźnie się burzy.
Więc nie rozumiem na co liczysz, że nagle okaże się ze twój kod jest prawidłowy zaś kompilator kłamie?
Poza tym to nie jest sprawdzanie daty, to twoje sprawdzanie (po naprawieniu bzdur oczywiście) powie że data 2015-99-99 jest poprawna natomiast 2016-1-1 już nie.
Nie używaj zmiennych globalnych.

1

Do klasyfikowania znaków służą funkcje z ctype.h: np. isdigit w tym wypadku. Dodatkowo strlen w sumie nie jest potrzebne bo można po prostu sprawdzać w pętli znaki, ale to mniej ważne. Poza tym nazwy są złe (ekstremalnie ważne), postinkrementacja i jest niefajna (mniej ważne) i formatowanie jest okropne (ekstremalnie ważne).

Ten kod nie do końca sprawdza poprawność daty bo nie sprawdza czy wpisane liczby mają sens.

0
Endrju napisał(a):

... isdigit w tym wypadku ...
Tylko is uwielbienia k zaprzeczeniom ...
return sscanf(data,"%d-%d-%d%c",&x,&x,&x,&x)==3; ;P

1 użytkowników online, w tym zalogowanych: 0, gości: 1