Salve a tutti ho fatto un programmino un po' lunghetto e poco pratico ma è tutto quello che sono riuscito a fare con le mie conoscenze (gli array gli sto per fare quindi non avendoli usati ho trovato non pochi problemi), che dovrebbe chiedere all'utente un'espressione e restituire il risultato (Nota bene: nessun operatore ha precedenza sugli altri, per esempio: a-c*b=(a-c)*b)...
Allora esso consiste nel leggere una stringa tramite un ciclo for con un espressione di controllo (c=getchar())!= '\n' che a seconda del carattere immesso esegue i calcoli partendo da sinistra grazie alla funzione switch.
Il mio problema è che dopo averlo finito, compilato, testato e corretto il programma esegue qualunque calcolo (+*/) tranne la sottrazione (-).
Penso che sia un errore di distrazione interno al ciclo perchè sembra saltare completamente il carattere '-' e i numeri successivi vengono scritti di seguito al numero precedente il segno meno.
Mi aiutereste a trovarlo?? Io ho poca concentrazione e voglia di controllare tutte le 200 righe...
Grazie in anticipo a tutti vi posto il codice sorgente e un output del mio terminale.

Programma
codice:
/* Programma per il calcolo di un espressione da input
 * (Nota: nessun operatore ha precedenza sull'altro)
 */

#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>

int main (void)
{
	float r = 0, smn = 0, stn = 0, mn = 0, dn = 0;
	char c = 0;
	bool n = true, sm = false, st = false, 
		m = false, d = false, nl = false;

	printf("Enter an expression: ");
	for (; (c = getchar()) != '\n'; )
	{
		switch (c)
		{
			case '0':
			{
				if (sm == false && m == false && d == false)
					{r = r * 10.00f + 0.00f;}
				else if (sm == true && n == false)
					{smn += 0.00f;}
				else if (sm == true && n == true)
					{smn = smn * 10.00f + 0.00f;}
				else if (st == true && n == false)
					{stn += 0.00f;}
				else if (st == true && n == true)
					{stn = stn * 10.00f + 0.00f;}
				else if (m == true && n == false)
					{mn += 0.00f;}
				else if (m == true && n == true)
					{mn = mn * 10.00f + 0.00f;}
				else if (d == true && n == false)
					{dn += 0.00f;}
				else if (d == true && n == true)
					{dn = dn * 10.00f + 0.00f;}
				break;
			}
			case '1':
			{
				if (sm == false && m == false && d == false)
					{r = r * 10.00f + 1.00f;}
				else if (sm == true && n == false)
					{smn += 1.00f;}
				else if (sm == true && n == true)
					{smn = smn * 10.00f + 1.00f;}
				else if (st == true && n == false)
					{stn += 1.00f;}
				else if (st == true && n == true)
					{stn = stn * 10.00f + 1.00f;}
					else if (m == true && n == false) 
					{mn += 1.00f;}
				else if (m == true && n == true)
					{mn = mn * 10.00f + 1.00f;}
				else if (d == true && n == false)
					{dn += 1.00f;}
				else if (d == true && n == true)
					{dn = dn * 10.00f + 1.00f;}
				break;
			}
			case '2':
			{
				if (sm == false && m == false && d == false)
					{r = r * 10.00f + 2.00f;}
				else if (sm == true && n == false)
					{smn += 2.00f;}
				else if (sm == true && n == true)
					{smn = smn * 10.00f + 2.00f;}
				else if (st == true && n == false)
					{stn += 2.00f;}
				else if (st == true && n == true)
					{stn = stn * 10.00f + 2.00f;}
				else if (m == true && n == false)
					{mn += 2.00f;}
				else if (m == true && n == true) 
					{mn = mn * 10.00f + 2.00f;}
				else if (d == true && n == false)
					{dn += 2.00f;}
				else if (d == true && n == true)
					{dn = dn * 10.00f + 2.00f;}
				break;
			}
			case '3':
			{
				if (sm == false && m == false && d == false)
					{r = r * 10.00f + 3.00f;}
				else if (sm == true && n == false)
					{smn += 3.00f;}
				else if (sm == true && n == true)
					{smn = smn * 10.00f + 3.00f;}
				else if (st == true && n == false)
					{stn += 3.00f;}
				else if (st == true && n == true)
					{stn = stn * 10.00f + 3.00f;}
				else if (m == true && n == false)
					{mn += 3.00f;}
				else if (m == true && n == true)
					{mn = mn * 10.00f + 3.00f;}
				else if (d == true && n == false)
					{dn += 3.00f;}
				else if (d == true && n == true) 
					{dn = dn * 10.00f + 3.00f;}
				break;
			}
			case '4':
			{
				if (sm == false && m == false && d == false)
					{r = r * 10.00f + 4.00f;}
				else if (sm == true && n == false)
					{smn += 4.00f;}
				else if (sm == true && n == true) 
					{smn = smn * 10.00f + 4.00f;}
				else if (st == true && n == false)
					{stn += 4.00f;}
				else if (st == true && n == true)
					{stn = stn * 10.00f + 4.00f;}
				else if (m == true && n == false) 
					{mn += 4.00f;}
				else if (m == true && n == true) 
					{mn = mn * 10.00f + 4.00f;}
				else if (d == true && n == false)
					{dn += 4.00f;}
				else if (d == true && n == true)
					{dn = dn * 10.00f + 4.00f;}
				break;
			}
			case '5':
			{
				if (sm == false && m == false && d == false)
					{r = r * 10.00f + 5.00f;}
				else if (sm == true && n == false)
					{smn += 5.00f;}
				else if (sm == true && n == true)
					{smn = smn * 10.00f + 5.00f;}
				else if (st == true && n == false)
					{stn += 5.00f;}
				else if (st == true && n == true)
					{stn = stn * 10.00f + 5.00f;}
				else if (m == true && n == false)
					{mn += 5.00f;}
				else if (m == true && n == true)
					{mn = mn * 10.00f + 5.00f;}
				else if (d == true && n == false)
					{dn += 5.00f;}
				else if (d == true && n == true)
					{dn = dn * 10.00f + 5.00f;}
				break;
			}
			case '6':
			{
				if (sm == false && m == false && d == false) 
					{r = r * 10.00f + 6.00f;}
				else if (sm == true && n == false)
					{smn += 6.00f;}
				else if (sm == true && n == true) 
					{smn = smn * 10.00f + 6.00f;}
				else if (st == true && n == false)
					{stn += 6.00f;}
				else if (st == true && n == true)
					{stn = stn * 10.00f + 6.00f;}
				else if (m == true && n == false)
					{mn += 6.00f;}
				else if (m == true && n == true)
					{mn = mn * 10.00f + 6.00f;}
				else if (d == true && n == false)
					{dn += 6.00f;}
				else if (d == true && n == true)
					{dn = dn * 10.00f + 6.00f;}
				break;
			}
			case '7':
			{
				if (sm == false && m == false && d == false)
					{r = r * 10.00f + 7.00f;}
				else if (sm == true && n == false)
					{smn += 7.00f;}
				else if (sm == true && n == true)
					{smn = smn * 10.00f + 7.00f;}
				else if (st == true && n == false)
					{stn += 7.00f;}
				else if (st == true && n == true)
					{stn = stn * 10.00f + 7.00f;}
				else if (m == true && n == false)
					{mn += 7.00f;}
				else if (m == true && n == true)
					{mn = mn * 10.00f + 7.00f;}
				else if (d == true && n == false)
					{dn += 7.00f;}
				else if (d == true && n == true)
					{dn = dn * 10.00f + 7.00f;}
				break;
			}
			case '8':
			{
				if (sm == false && m == false && d == false)
					{r = r * 10.00f + 8.00f;}
				else if (sm == true && n == false)
					{smn += 8.00f;}
				else if (sm == true && n == true)
					{smn = smn * 10.00f + 8.00f;}
				else if (st == true && n == false)
					{stn += 8.00f;}
				else if (st == true && n == true)
					{stn = stn * 10.00f + 8.00f;}
				else if (m == true && n == false)
					{mn += 8.00f;}
				else if (m == true && n == true)
					{mn = mn * 10.00f + 8.00f;}
				else if (d == true && n == false)
					{dn += 8.00f;}
				else if (d == true && n == true)
					{dn = dn * 10.00f + 8.00f;}
				break;
			}
			case '9':
			{
				if (sm == false && m == false && d == false)
					{r = r * 10.00f + 9.00f;}
				else if (sm == true && n == false)
					{smn += 9.00f;}
				else if (sm == true && n == true)
					{smn = smn * 10.00f + 9.00f;}
				else if (st == true && n == false)
					{stn += 9.00f;}
				else if (st == true && n == true)
					{stn = stn * 10.00f + 9.00f;}
				else if (m == true && n == false)
					{mn += 9.00f;}
				else if (m == true && n == true)
					{mn = mn * 10.00f + 9.00f;}
				else if (d == true && n == false)
					{dn += 9.00f;}
				else if (d == true && n == true)
					{dn = dn * 10.00f + 9.00f;}
				break;
			}
			case '+':
			{
				if (sm == true)
					{r += smn;}
				else if (st == true)
					{r -= stn;}
				else if (m == true)
					{r *= mn;}
				else if (d == true)
					{r /= dn;}
				n = false;
				sm = true;
				st = false;
				m = false;
				d = false;
				smn = 0;
				stn = 0;
				mn = 0;
				dn = 0;
				break;
			}
			case '-':
			{
				if (sm == true) {r += smn;}
				else if (st == true) {r -= stn;}
				else if (m == true) {r *= mn;}
				else if (d == true) {r /= dn;}
				n = false;
				sm = false;
				st = true;
				m = false;
				d = false;
				smn = 0;
				stn = 0;
				mn = 0;
				dn = 0;
				break;
			}
			case '*':
			{
				if (sm == true) {r += smn;}
				else if (st == true) {r -= stn;}
				else if (m == true) {r *= mn;}
				else if (d == true) {r /= dn;}
				n = false;
				sm = false;
				st = false;
				m = true;
				d = false;
				smn = 0;
				stn = 0;
				mn = 0;
				dn = 0;
				break;
			}
			case '/':
			{
				if (sm == true) {r += smn;}
				else if (st == true) {r -= stn;}
				else if (m == true) {r *= mn;}
				else if (d == true) {r /= dn;}
				n = false;
				sm = false;
				st = false;
				m = false;
				d = true;
				smn = 0;
				stn = 0;
				mn = 0;
				dn = 0;
				break;
			}
		}
		if (c >= '0' && c <= '9') {n == true;}
	}
	if (sm == true) {r += smn;}
	else if (st == true) {r -= stn;}
	else if (m == true) {r *= mn;}
	else if (d == true) {r /= dn;}
	n = false;
	sm = false;
	st = false;
	m = false;
	d = false;
	smn = 0;
	stn = 0;
	mn = 0;
	dn = 0;
	printf("Value of expression: %.2f\n", r);

	return 0;
}
Output
codice:
zorgatone@zorgatone-laptop:~/Esercizi$ ./sez7prog12_comp.out
Enter an expression: 2*2*2
Value of expression: 8.00
zorgatone@zorgatone-laptop:~/Esercizi$ ./sez7prog12_comp.out
Enter an expression: 2+2-2
Value of expression: 42.00
zorgatone@zorgatone-laptop:~/Esercizi$