Hejka,
Robiłem zadanie ze SPOJa: https://pl.spoj.com/problems/KC005
i utknąłem. Dla przykładowych danych program działa super, ale jak puszczam do sprawdzenia, to dostaję błąd wykonania (SIGABRT). Z tego co gdzieś usłyszałem, błąd jest powodowany przez to, że np. odwołujemy się do nieistniejącej szufladki itp. Przeglądając mój kod jednak nie znalazłem niczego takiego. Poniżej zamieszczam kod:
#include <iostream>
using namespace std;
int main()
{
string II, NN, DATE, x;
while(cin>>x>>II>>x>>NN>>x>>x>>DATE)
{
//IMIE
if(II[0]>=65 && II[0]<=90 && II.length()<=11)
{
for(int i=1; i<II.length()-1; i++)
{
if(II[i]<97 || II[i]>122)
{
goto x;
continue;
}
}
}
else
{
x:
cout<<0<<endl;
continue;
}
//NAZWISKO
if(II[0]>=65 && II[0]<=90 && NN.length()<=21)
{
for(int i=1; i<NN.length()-1; i++)
{
if(NN[i]<97 || NN[i]>122)
goto y;
}
}
else
{
y:
cout<<1<<endl;
continue;
}
//DATA - ROZDZIELENIE
bool f1=0,f2=0;
string RRRR,MM,DD;
for(int i=0; i<10; i++)
{
if(DATE[i]=='-' && f1==0) {f1=1; i++;}
else if(f1==0) {RRRR+=DATE[i]; continue;}
if(DATE[i]=='-' && f1==1 && f2==0) {f2=1; i++;}
else if(f1==1 && f2==0) {MM+=DATE[i]; continue;}
DD+=DATE[i];
}
//DATA - WARUNKI
if(RRRR=="" || MM=="" || DD==""
|| stoi(RRRR)>2000 || stoi(RRRR)<1900 || stoi(MM)>12 || stoi(MM)<1 || stoi(DD)<1 || stoi(DD)>31)
{
cout<<2<<endl;
continue;
}
//INNE PRZYPADKI
cout<<3<<endl;
}
return 0;
}
Dla wyjaśnienia te "x" które wczytuję, to po prostu zapychacz, żeby pominąć w jakiś sposób te nagłówki( "imie: " itp.).
Jaki tu może być błąd? I dla jakich jeszcze przypadków może wystąpić błąd wykonania?