-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpanic_mode.c
More file actions
98 lines (90 loc) · 2.23 KB
/
panic_mode.c
File metadata and controls
98 lines (90 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <locale.h>
char token;
int somas(void); // Soma e Subtração
int produto(void); // Multiplicação
int num(void); // Números ou Sub-expressões
void error_Parenteses(void){ //Quando há mais de um parênteses ou falta um na expressão
fprintf(stderr,"\nEstá faltando um parêntesis na expressão\n");
}
void error_Divisao(void){ //Quando colocada, não permitida
fprintf(stderr,"\nErro: Operador para divisão não é permitido\n");
}
void error_Porcentagem(void){ //Quando colocada, não permitida
fprintf(stderr,"\nErro: Operador para resto de divisão não é permitido\n");
}
void error_EntradaChar(void){ //Quando colocada, não permitida
fprintf(stderr,"\nErro: Entrada com número e caractere não é permitido\n");
}
void error_EntradaEspecial(void){ //Quando colocado um caracter especial, não é permitido
fprintf(stderr,"\nErro: Entrada com caracter especial não é permitido\n");
}
void match(char tokenEsperado){
if(token == tokenEsperado){
token = getchar();
}else{
error_Parenteses();
while(!isdigit(token))
token = getchar();
}
}
int main(void) {
setlocale(LC_ALL,"Portuguese");
int result;
printf("\nDigite aqui a expressão: \n");
token = getchar();
result = somas();
if(token == '\n'){
printf("\nResultado = %d\n", result);
}else{
if(isalpha(token)){
error_EntradaChar();
printf("\nResultado = %d\n", result);
}
if(token == '/'){
error_Divisao();
}
if(token == '%'){
error_Porcentagem();
}
}
}
int produto(void){
int temp = num();
while(token == '*'){
match('*');
temp *= num();
}
return temp;
}
int somas(void){
int temp = produto();
while((token == '+') || (token == '-')){
switch(token){
case '+':
match('+');
temp += produto();
break;
case '-':
match('-');
temp -= produto();
break;
}
}
return temp;
}
int num(void){
int temp;
if (token == '('){
match ('(');
temp = somas();
match(')');
}else if (isdigit(token)){
ungetc(token,stdin);
scanf("%d", &temp);
token = getchar();
}
return temp;
}