Salve a tutti,
sto realizzando un programma che faccia da convertitore tra numeri greci e numeri arabi decimali.
Per quanto riguarda l'interfaccia grafica e l'immissione dei caratteri tutto torna.
È (solo) la funzione che deve di fatto convertire a darmi problemi.
Posto il codice:
Quando inserisco un solo carattere nel widget entry, funziona tutto, per esempio inserendo (alpha), la variabile finale restituisce effettivamente 1.codice:GtkWidget *risultato, *testo; gunichar *a; int finale = 0; void calcola() { guint lungh; int i; gchar *num; lungh = GTK_ENTRY(testo)->text_length; for(i = lungh-1; i >= 0; i--) { switch (a[i]) { case 45518: //alfa finale += 1; break; case 45774: //beta finale += 2; break; case 46030: //gamma finale += 3; break; case 46286: //delta finale += 4; break; case 46542: //epsilon finale += 5; break; case 39887: //stigma finale += 6; break; case 46798: //zeta finale += 7; break; case 47054: //eta finale += 8; break; case 47310: //theta finale += 9; break; case 47566: //iota finale += 10; break; case 47822: //kappa finale += 20; break; case 48078: //lambda finale += 30; break; case 48334: //mi finale += 40; break; case 48590: //ni finale += 50; break; case 48846: //xi finale += 60; break; case 49102: //omicron finale += 70; break; case 32975: //pi finale += 80; break; case 39375: //qoppa finale += 90; break; case 33231: //rho finale += 100; break; case 33743: //sigma finale += 200; break; case 33999: //tau finale += 300; break; case 34255: //upsilon finale += 400; break; case 34511: //phi finale += 500; break; case 34767: //chi finale += 600; break; case 35023: //psi finale += 700; break; case 35279: //omega finale += 800; break; case 41: //sampi finale += 900; break; } } sprintf(num, "%d", finale); gtk_label_set_text(risultato,num); finale = 0; }
Quando però inserisco più di un carattere, il corrispettivo codice Unicode cambia, a seconda della stringa inserita. Quindi l'alpha non avrà più un valore di 45518.
Per esempio:
input = β (=45774). Risultato finale = 2.
input = ββ (=1815352320 la prima e -1295076658 la seconda). Risultato finale = 0.
Sapete spiegarmi come mai, e, eventualmente, come risolvere?
Ne approfitto anche per chiedere: è possibile, nella funzione g_signal_connect passare più di un argomento alla funzione di callback?
Grazie.
Girildo.

) la funzione che deve di fatto convertire a darmi problemi.
Rispondi quotando