diff --git a/calculadora/calc b/calculadora/calc
new file mode 100755
index 0000000000000000000000000000000000000000..690559bcb302df5c4c69aaffea746967b4ea0ed8
Binary files /dev/null and b/calculadora/calc differ
diff --git a/calculadora/calculadora.c b/calculadora/calculadora.c
index e8384e0d82564c19583ab1cdacf292f7d010f32d..913960e04bb7675ae11b0cce82e89bb676b07aae 100644
--- a/calculadora/calculadora.c
+++ b/calculadora/calculadora.c
@@ -46,9 +46,7 @@ int converte_operador(t_operador *op, char c) {
 /* Retorna 1 se o operador op1 tem precedencia sobre o operador op2.
    Retorna 0 caso contrario. */
 int precedencia_maior_ou_igual(t_operador op1, t_operador op2) {
-    if(floor(op1) >= floor(op2))
-        return 1;
-    return 0;
+    return floor(op1) >= floor(op2);
 }
 
 
@@ -173,6 +171,11 @@ int main() {
 			return 1;
 		}
 
+		if( !(isdigit(*c) || *c == '('))
+			/* Se o primeiro caracter não for nem um dígito nem um abre parênteses,
+			   o formato está errado. */
+			erro("formato incorreto", c - entrada + 1, &flag_erro);
+
 		while(*c != 'q' && *c != '\n' && !flag_erro) {
 			/* Percorre o ponteiro c pela entrada até achar um q, o final da linha ou um erro. */
 
@@ -266,9 +269,9 @@ int main() {
 			}
 
 			/* Após o processamento, o resultado final da expressao esta no topo da 
-			   pilha de valores. */
+			   pilha de valores. A pilha deve conter apenas esse valor. */
 			if(!flag_erro) {
-				if(!desempilha(&resultado, pilha_valores))
+				if(!desempilha(&resultado, pilha_valores) || !pilha_vazia(pilha_valores))
 					erro("formato incorreto", c - entrada + 1, &flag_erro);
 				else {
 					memoria = resultado;