Spoj nie kompiluje

0

Polecenie to:
"Napisz program, który w zależności od podanej liczby wyświetli jeden z komunikatów:
-jeżeli liczba jest ujemna, to wyświetli "liczba ujemna"
-jeżeli liczba jest cyfrą, to wyświetli jej wartość słownie (dokładniej, wyświetli jeden z komunikatów: "zero", "jeden", "dwa", "trzy", "cztery", "piec", "szesc", "siedem", "osiem", "dziewiec")
-jeżeli liczba jest dodatnia i nie jest cyfrą, to wyświetli informację czy jest parzysta (dokładniej, wyświetli jeden z komunikatów: "liczba parzysta", "liczba nieparzysta")".
Program który napisałem kompiluje i wydaje się że działa poprawnie ale Spoj zwraca "compilation error"

Oto mój kod:

 

#include <stdio.h>

int main() 
{ 
    int a;
	int i;
	
	scanf("%d",&a);
	
	if(a<0)
	i=10;
	else if(a>9)
	i=11;
	else
	i=a; 
	
	
	switch(i)
	{
		case 0: printf("zero\n"); break;
		case 1: printf("jeden\n"); break;
		case 2: printf("dwa\n"); break;
		case 3: printf("trzy\n"); break;
		case 4: printf("cztery\n"); break;
		case 5: printf("pięć\n"); break;
		case 6: printf("sześć\n"); break;
		case 7: printf("siedem\n"); break;
		case 8: printf("osiem\n"); break;
		case 9: printf("dziewięć\n"); break;
		case 10: printf("liczba ujemna\n"); break;
		case 11: 
		if(a%2==0)
			printf("liczba parzysta\n");
		else
			printf("liczba nieparzysta\n"); break;
	 }
	 
	 	 return 0;
}
1

A czy zamiast całej drabinki switchów nie prościej użyć np. tablic,a potem jeśli jest jednocyfrowa liczba wypisywać elementy tablicy?
Coś w stylu:

t = {"zero", "jeden", "dwa"...itd}
wczytaj liczba
if  liczba < 0
    print "ujemna"
else if liczba >=0 && liczba<10
    print t[liczba]
else 
   if liczba & 1 == 0
   "parzysta"
   else 
     "nieparzysta" 
0
Serechiel napisał(a):

A czy zamiast całej drabinki switchów nie prościej użyć np. tablic,a potem jeśli jest jednocyfrowa liczba wypisywać elementy tablicy?

Pewnie łatwiej tylko że to sam początek mojej nauki programowania i chodzi o to aby wykonać polecenie w takiej prostej wersji z użyciem if i switch.

0
static char *tb[]={"zero","jeden","dwa","trzy","cztery","pięć","sześć","siedem","osiem","dziewięć","parzysta","nieparzysta","ujemna"};
int x=(a<10?10|(a&1):a<0?12:a;
//cout<<tb[x]<<endl; // Heh, przecież pytający chce switch'a!
switch(x) // Chcę switch'a za wszelką cenę, więc niech ma switch'a
{
   case 0: cout<<x[tb];
   case 1: cout<<x[tb];
   case 2: cout<<x[tb];
   ...
   ...
   case 10: cout<<x[tb];
   case 11: cout<<x[tb];
   case 12: cout<<x[tb];
}
0

Program kompiluje się i działa poprawnie (przynajmniej na gcc) więc po ci jakieś spoje punkty na słodziaka zbierasz :)

2

Możliwe, że na którymś etapie przetwarzania tego pliku na spoju kodowanie polskich znaków się kaszani i powoduje błąd kompilacji.
Spróbuj bez ogonków.

0
Flaker napisał(a):

Możliwe, że na którymś etapie przetwarzania tego pliku na spoju kodowanie polskich znaków się kaszani i powoduje błąd kompilacji.
Spróbuj bez ogonków.

Raczej problemem nie jest kodowanie znaków, ale niedosłowne rozumienie treści zadania.
W treści jest wyraźnie cyfry są opisane bezogonkowo, a OP sobie dopisał ogonki.
Na SPOJ zadania zawsze definiowane są tak by mieścić się w ASCII.

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