KL25Z program that calculates the difference in days, hours, minutes, between two dates. Needs a terminal on the PC side to communicate with the program. Terminal must have local echo on. Terminal Data input needs some improvement.

Dependencies:   mbed

Committer:
lmsousa
Date:
Fri May 22 08:58:12 2015 +0000
Revision:
3:add864dd8eab
Parent:
2:1d24f233ac26
Child:
4:b0884b059d7e
Melhoria do processo de leitura do teclado. Nesta vers?o  a leitura ? efectuada e validada caracter a caracter o que permite um maior controlo e evita que o programa tenha comportamentos indevidos. ; Para esse efeito foi constru?da uma nova fun??o.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lmsousa 0:dce171f603a8 1 /*
lmsousa 0:dce171f603a8 2 Programa que calcula a diferença entre duas datas.
lmsousa 0:dce171f603a8 3 LESEM ENAUTICA 2014 Luis Sousa aluno 11001
lmsousa 0:dce171f603a8 4 */
lmsousa 0:dce171f603a8 5
lmsousa 3:add864dd8eab 6 //#include <stdio.h>
lmsousa 0:dce171f603a8 7
lmsousa 3:add864dd8eab 8 #include "mbed.h"
lmsousa 3:add864dd8eab 9 Serial pc(USBTX, USBRX);
lmsousa 2:1d24f233ac26 10
lmsousa 3:add864dd8eab 11 int readkbd(void);
lmsousa 0:dce171f603a8 12 int bissexto(int ano);
lmsousa 0:dce171f603a8 13 int dias_do_mes(int ano,int mes);
lmsousa 0:dce171f603a8 14 int dias_do_ano(int ano);
lmsousa 0:dce171f603a8 15 int dias_ate_fim_mes(int ano,int mes,int dia);
lmsousa 0:dce171f603a8 16 int dias_dos_meses_intermedios(int ano,int mes1,int mes2);
lmsousa 0:dce171f603a8 17 int dias_dos_anos_intermedios(int ano1, int ano2);
lmsousa 0:dce171f603a8 18 int dias_ate_fim_ano(int ano,int mes,int dia);
lmsousa 0:dce171f603a8 19 int dias_desde_principio_ano(int ano,int mes,int dia);
lmsousa 0:dce171f603a8 20 long int dif_data(int ano1,int mes1,int dia1,int ano2,int mes2,int dia2);
lmsousa 0:dce171f603a8 21
lmsousa 2:1d24f233ac26 22
lmsousa 2:1d24f233ac26 23
lmsousa 0:dce171f603a8 24 int main(void)
lmsousa 2:1d24f233ac26 25
lmsousa 0:dce171f603a8 26 {
lmsousa 1:0756a87e335f 27 int limite_ano_min=0,limite_ano_max=2100;//Valores limite para o ano//
lmsousa 1:0756a87e335f 28 int ano_dt1,ano_dt2,mes_dt1,mes_dt2,dia_dt1,dia_dt2;
lmsousa 1:0756a87e335f 29 long int score_dt1,score_dt2; //Variaveis que avaliam a data mais alta//
lmsousa 1:0756a87e335f 30 int hora_dt1,hora_dt2,horas,min_dt1,min_dt2,tmins1,tmins2,minutos,tmp_ano,tmp_mes,tmp_dia,tmp_hora,tmp_min;
lmsousa 2:1d24f233ac26 31 char opcao='N';
lmsousa 2:1d24f233ac26 32 int continuar=1;
lmsousa 0:dce171f603a8 33
lmsousa 1:0756a87e335f 34 do {
lmsousa 3:add864dd8eab 35 printf("\r\n");
lmsousa 2:1d24f233ac26 36 printf("%c[2J",27); //clrscr();
lmsousa 0:dce171f603a8 37
lmsousa 2:1d24f233ac26 38 printf(" ----------------------------------------------------\r\n");
lmsousa 2:1d24f233ac26 39 printf("| Programa que calcula a diferenca entre duas datas. |\r\n");
lmsousa 2:1d24f233ac26 40 printf("| |\r\n");
lmsousa 2:1d24f233ac26 41 printf("| LESEM ENAUTICA 2015 Luis Sousa aluno 11001 |\r\n");
lmsousa 2:1d24f233ac26 42 printf(" ----------------------------------------------------\r\n\n");
lmsousa 0:dce171f603a8 43
lmsousa 2:1d24f233ac26 44 printf("\n\nIntroducao da Data 1\r\n");
lmsousa 2:1d24f233ac26 45 do {
lmsousa 2:1d24f233ac26 46 printf("\r\nIntroduza o ano da Data 1: (%d-%d): ",limite_ano_min,limite_ano_max);
lmsousa 3:add864dd8eab 47 //scanf("%d",&ano_dt1);
lmsousa 3:add864dd8eab 48 ano_dt1=readkbd();
lmsousa 2:1d24f233ac26 49 if (!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max)))
lmsousa 2:1d24f233ac26 50 printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max);
lmsousa 2:1d24f233ac26 51 } while(!((ano_dt1>=limite_ano_min)&&(ano_dt1<=limite_ano_max)));
lmsousa 1:0756a87e335f 52
lmsousa 2:1d24f233ac26 53 do {
lmsousa 2:1d24f233ac26 54 printf("\r\nIntroduza o mes da Data 1: (%d-%d): ",1,12);
lmsousa 3:add864dd8eab 55 //scanf("%d",&mes_dt1);
lmsousa 3:add864dd8eab 56 mes_dt1=readkbd();
lmsousa 2:1d24f233ac26 57 if (!((mes_dt1>=1)&&(mes_dt1<=12)))
lmsousa 2:1d24f233ac26 58 printf("\r\nO mes tem de estar compreendido entre %d e %d ",1,12);
lmsousa 2:1d24f233ac26 59 } while(!((mes_dt1>=1)&&(mes_dt1<=12)));
lmsousa 0:dce171f603a8 60
lmsousa 2:1d24f233ac26 61 do {
lmsousa 2:1d24f233ac26 62 printf("\r\nIntroduza o dia da Data 1: (%d-%d): ",1,dias_do_mes(ano_dt1,mes_dt1));
lmsousa 3:add864dd8eab 63 //scanf("%d",&dia_dt1);
lmsousa 3:add864dd8eab 64 dia_dt1=readkbd();
lmsousa 2:1d24f233ac26 65 if (!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1))))
lmsousa 2:1d24f233ac26 66 printf("\r\nO dia tem de estar compreendido entre %d e %d ",1,dias_do_mes(ano_dt1,mes_dt1));
lmsousa 2:1d24f233ac26 67 } while(!((dia_dt1>=1) && (dia_dt1 <= dias_do_mes(ano_dt1,mes_dt1))));
lmsousa 0:dce171f603a8 68
lmsousa 2:1d24f233ac26 69 do {
lmsousa 2:1d24f233ac26 70 printf("\r\nIntroduza a hora da Data 1: (%d-%d): ",0,23);
lmsousa 3:add864dd8eab 71 //scanf("%d",&hora_dt1);
lmsousa 3:add864dd8eab 72 hora_dt1=readkbd();
lmsousa 2:1d24f233ac26 73 if (!((hora_dt1>=0) && (hora_dt1 <= 23)))
lmsousa 2:1d24f233ac26 74 printf("\r\nA hora tem de estar compreendida entre %d e %d ",0,23);
lmsousa 2:1d24f233ac26 75 } while(!((hora_dt1>=0) && (hora_dt1 <= 23)));
lmsousa 0:dce171f603a8 76
lmsousa 2:1d24f233ac26 77 do {
lmsousa 2:1d24f233ac26 78 printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59);
lmsousa 3:add864dd8eab 79 //scanf("%d",&min_dt1);
lmsousa 3:add864dd8eab 80 min_dt1=readkbd();
lmsousa 2:1d24f233ac26 81 if (!((min_dt1>=0) && (min_dt1 <= 59)))
lmsousa 2:1d24f233ac26 82 printf("\r\nOs minutos devem estar compreendidos entre %d e %d ",0,59);
lmsousa 2:1d24f233ac26 83 } while(!((min_dt1>=0) && (min_dt1 <= 59)));
lmsousa 0:dce171f603a8 84
lmsousa 0:dce171f603a8 85
lmsousa 2:1d24f233ac26 86 printf("\r\n\nIntroducao da Data 2");
lmsousa 2:1d24f233ac26 87 do {
lmsousa 2:1d24f233ac26 88 printf("\r\nIntroduza o ano da Data 2: (%d-%d): ",limite_ano_min,limite_ano_max);
lmsousa 3:add864dd8eab 89 //scanf("%d",&ano_dt2);
lmsousa 3:add864dd8eab 90 ano_dt2=readkbd();
lmsousa 2:1d24f233ac26 91 if (!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max)))
lmsousa 2:1d24f233ac26 92 printf("\r\nO ano tem de estar compreendido entre %d e %d ",limite_ano_min,limite_ano_max);
lmsousa 2:1d24f233ac26 93 } while(!((ano_dt2>=limite_ano_min)&&(ano_dt2<=limite_ano_max)));
lmsousa 2:1d24f233ac26 94
lmsousa 2:1d24f233ac26 95 do {
lmsousa 2:1d24f233ac26 96 printf("\r\nIntroduza o mes da Data 2: (%d-%d): ",1,12);
lmsousa 3:add864dd8eab 97 //scanf("%d",&mes_dt2);
lmsousa 3:add864dd8eab 98 mes_dt2=readkbd();
lmsousa 2:1d24f233ac26 99 if (!((mes_dt2>=1)&&(mes_dt2<=12)))
lmsousa 2:1d24f233ac26 100 printf("\r\nO mes tem de estar compreendido entre %d e %d ",1,12);
lmsousa 2:1d24f233ac26 101 } while(!((mes_dt2>=1)&&(mes_dt2<=12)));
lmsousa 2:1d24f233ac26 102
lmsousa 2:1d24f233ac26 103 do {
lmsousa 2:1d24f233ac26 104 printf("\r\nIntroduza o dia da Data 2: (%d-%d): ",1,dias_do_mes(ano_dt2,mes_dt2));
lmsousa 3:add864dd8eab 105 //scanf("%d",&dia_dt2);
lmsousa 3:add864dd8eab 106 dia_dt2=readkbd();
lmsousa 2:1d24f233ac26 107 if (!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2))))
lmsousa 2:1d24f233ac26 108 printf("\r\nO dia tem de estar compreendido entre %d e %d ",1,dias_do_mes(ano_dt2,mes_dt2));
lmsousa 2:1d24f233ac26 109 } while(!((dia_dt2>=1) && (dia_dt2 <= dias_do_mes(ano_dt2,mes_dt2))));
lmsousa 2:1d24f233ac26 110
lmsousa 2:1d24f233ac26 111 do {
lmsousa 2:1d24f233ac26 112 printf("\r\nIntroduza a hora da Data 2: (%d-%d): ",0,23);
lmsousa 3:add864dd8eab 113 //scanf("%d",&hora_dt2);
lmsousa 3:add864dd8eab 114 hora_dt2=readkbd();
lmsousa 2:1d24f233ac26 115 if (!((hora_dt2>=0) && (hora_dt2 <= 23)))
lmsousa 2:1d24f233ac26 116 printf("\r\nA hora tem de estar compreendida entre %d e %d ",0,23);
lmsousa 2:1d24f233ac26 117 } while(!((hora_dt2>=0) && (hora_dt2 <= 23)));
lmsousa 2:1d24f233ac26 118
lmsousa 2:1d24f233ac26 119 do {
lmsousa 2:1d24f233ac26 120 printf("\r\nIntroduza os minutos da Data 1: (%d-%d): ",0,59);
lmsousa 3:add864dd8eab 121 //scanf("%d",&min_dt2);
lmsousa 3:add864dd8eab 122 min_dt2=readkbd();
lmsousa 2:1d24f233ac26 123 if (!((min_dt2>=0) && (min_dt2 <= 59)))
lmsousa 2:1d24f233ac26 124 printf("\r\nOs minutos devem estar compreendidos entre %d e %d ",0,59);
lmsousa 2:1d24f233ac26 125 } while(!((min_dt2>=0) && (min_dt2 <= 59)));
lmsousa 2:1d24f233ac26 126
lmsousa 2:1d24f233ac26 127 score_dt1 = dif_data(limite_ano_min,1,1,ano_dt1,mes_dt1,dia_dt1);
lmsousa 2:1d24f233ac26 128 score_dt2 = dif_data(limite_ano_min,1,1,ano_dt2,mes_dt2,dia_dt2);
lmsousa 2:1d24f233ac26 129
lmsousa 2:1d24f233ac26 130 tmins1= hora_dt1*60+min_dt1; //reduz primeira hora a minutos
lmsousa 2:1d24f233ac26 131 tmins2= hora_dt2*60+min_dt2; //reduz segunda hora a minutos
lmsousa 2:1d24f233ac26 132
lmsousa 2:1d24f233ac26 133 if ((score_dt1>score_dt2)||((score_dt1 == score_dt2)&&(tmins1>tmins2)))
lmsousa 2:1d24f233ac26 134 /*
lmsousa 2:1d24f233ac26 135 Se a primeira data for maior que a segunda
lmsousa 2:1d24f233ac26 136 troca as datas de forma a ficar data2>data1
lmsousa 2:1d24f233ac26 137 */
lmsousa 2:1d24f233ac26 138 {
lmsousa 2:1d24f233ac26 139 tmp_ano=ano_dt1;
lmsousa 2:1d24f233ac26 140 tmp_mes=mes_dt1;
lmsousa 2:1d24f233ac26 141 tmp_dia=dia_dt1;
lmsousa 2:1d24f233ac26 142 tmp_hora=hora_dt1;
lmsousa 2:1d24f233ac26 143 tmp_min=min_dt1;
lmsousa 2:1d24f233ac26 144
lmsousa 2:1d24f233ac26 145 ano_dt1=ano_dt2;
lmsousa 2:1d24f233ac26 146 mes_dt1=mes_dt2;
lmsousa 2:1d24f233ac26 147 dia_dt1=dia_dt2;
lmsousa 2:1d24f233ac26 148 hora_dt1=hora_dt2;
lmsousa 2:1d24f233ac26 149 min_dt1=min_dt2;
lmsousa 2:1d24f233ac26 150
lmsousa 2:1d24f233ac26 151 ano_dt2=tmp_ano;
lmsousa 2:1d24f233ac26 152 mes_dt2=tmp_mes;
lmsousa 2:1d24f233ac26 153 dia_dt2=tmp_dia;
lmsousa 2:1d24f233ac26 154 hora_dt2=tmp_hora;
lmsousa 2:1d24f233ac26 155 min_dt2=tmp_min;
lmsousa 2:1d24f233ac26 156
lmsousa 2:1d24f233ac26 157 tmins1= hora_dt1*60+min_dt1; //Depois da troca recalcula
lmsousa 2:1d24f233ac26 158 tmins2= hora_dt2*60+min_dt2; //tmins1 e tmins2
lmsousa 2:1d24f233ac26 159 }
lmsousa 2:1d24f233ac26 160
lmsousa 2:1d24f233ac26 161 printf("\r\n\nData 1: %d-%d-%d %d horas e %d minutos",dia_dt1,mes_dt1,ano_dt1,hora_dt1,min_dt1);
lmsousa 2:1d24f233ac26 162 printf("\r\nData 2: %d-%d-%d %d horas e %d minutos",dia_dt2,mes_dt2,ano_dt2,hora_dt2,min_dt2);
lmsousa 2:1d24f233ac26 163
lmsousa 2:1d24f233ac26 164 if (tmins2>=tmins1) { //Se tmins2>tmins1 contabiliza dias completos mais algumas horas
lmsousa 2:1d24f233ac26 165 horas=(tmins2-tmins1)/60; //diferenca em horas
lmsousa 2:1d24f233ac26 166 minutos=(tmins2-tmins1)%60; //diferenca em minutos
lmsousa 2:1d24f233ac26 167 printf("\r\n\nA diferenca entre estas duas datas e de %ld dias, %d horas e %d minutos. ",dif_data(ano_dt1,mes_dt1,dia_dt1,ano_dt2,mes_dt2,dia_dt2),horas,minutos);
lmsousa 2:1d24f233ac26 168 } else { //Se tmins1>tmins2 retiramos um dia e fazemos a conta ah diferenca de horas
lmsousa 2:1d24f233ac26 169 horas=(24*60-tmins1+tmins2)/60; //diferenca em horas
lmsousa 2:1d24f233ac26 170 minutos=(24*60-tmins1+tmins2)%60; //diferenca em minutos
lmsousa 2:1d24f233ac26 171 printf("\r\n\nA diferenca entre estas duas datas e de %ld dias, %d horas e %d minutos. ",dif_data(ano_dt1,mes_dt1,dia_dt1,ano_dt2,mes_dt2,dia_dt2)-1,horas,minutos);
lmsousa 2:1d24f233ac26 172 }
lmsousa 2:1d24f233ac26 173
lmsousa 2:1d24f233ac26 174 printf("\r\n\nNovo Calculo de datas? (S/N) ");
lmsousa 2:1d24f233ac26 175 // opcao=getc();
lmsousa 2:1d24f233ac26 176 scanf(" %c", &opcao);
lmsousa 2:1d24f233ac26 177 // opcao = getchar(); */
lmsousa 2:1d24f233ac26 178 if((opcao =='S')||(opcao =='s')) continuar=1;
lmsousa 2:1d24f233ac26 179 else {
lmsousa 2:1d24f233ac26 180 continuar=0;
lmsousa 2:1d24f233ac26 181 // clrscr();
lmsousa 2:1d24f233ac26 182 printf("\r\nCalculos terminados! \r\n\n");
lmsousa 2:1d24f233ac26 183 }
lmsousa 2:1d24f233ac26 184
lmsousa 2:1d24f233ac26 185 } while (continuar);
lmsousa 0:dce171f603a8 186 }
lmsousa 0:dce171f603a8 187
lmsousa 0:dce171f603a8 188 int bissexto(int ano)
lmsousa 0:dce171f603a8 189 {
lmsousa 1:0756a87e335f 190 if((ano%400==0)||((ano%4==0)&&(ano%100!=0)))
lmsousa 1:0756a87e335f 191 return 1;
lmsousa 1:0756a87e335f 192 else
lmsousa 1:0756a87e335f 193 return 0;
lmsousa 0:dce171f603a8 194 }
lmsousa 0:dce171f603a8 195
lmsousa 0:dce171f603a8 196 int dias_do_ano(int ano)
lmsousa 0:dce171f603a8 197 {
lmsousa 1:0756a87e335f 198 if (bissexto(ano))return 366;
lmsousa 1:0756a87e335f 199 else return 365;
lmsousa 0:dce171f603a8 200 }
lmsousa 0:dce171f603a8 201
lmsousa 0:dce171f603a8 202 int dias_do_mes(int ano,int mes)
lmsousa 0:dce171f603a8 203 {
lmsousa 1:0756a87e335f 204 if (mes == 1||mes == 3||mes == 5||mes == 7||mes == 8||mes == 10||mes == 12)
lmsousa 1:0756a87e335f 205 return 31;
lmsousa 1:0756a87e335f 206 else if(mes == 4||mes == 6||mes == 9||mes == 11)
lmsousa 1:0756a87e335f 207 return 30;
lmsousa 1:0756a87e335f 208 else if (mes == 2)
lmsousa 0:dce171f603a8 209 if (bissexto (ano))
lmsousa 1:0756a87e335f 210 return 29;
lmsousa 0:dce171f603a8 211 else
lmsousa 1:0756a87e335f 212 return 28;
lmsousa 1:0756a87e335f 213 else return 255; //erro!!! mes invalido//
lmsousa 0:dce171f603a8 214 }
lmsousa 0:dce171f603a8 215
lmsousa 0:dce171f603a8 216 int dias_ate_fim_mes(int ano,int mes,int dia)
lmsousa 0:dce171f603a8 217 {
lmsousa 1:0756a87e335f 218 return (dias_do_mes(ano,mes)-dia);
lmsousa 0:dce171f603a8 219 }
lmsousa 0:dce171f603a8 220
lmsousa 0:dce171f603a8 221 int dias_dos_meses_intermedios(int ano,int mes1,int mes2)
lmsousa 0:dce171f603a8 222 {
lmsousa 1:0756a87e335f 223 int i,dias=0;
lmsousa 1:0756a87e335f 224 i=mes1;
lmsousa 1:0756a87e335f 225 i++; /*O primeiro e o ultimo mes nao sao contabilizados. So os intermedios*/
lmsousa 1:0756a87e335f 226 while (i<mes2) {
lmsousa 1:0756a87e335f 227 dias = dias + dias_do_mes(ano,i);
lmsousa 1:0756a87e335f 228 i++;
lmsousa 1:0756a87e335f 229 }
lmsousa 1:0756a87e335f 230 return dias;
lmsousa 0:dce171f603a8 231 }
lmsousa 0:dce171f603a8 232
lmsousa 0:dce171f603a8 233 int dias_dos_anos_intermedios(int ano1,int ano2)
lmsousa 0:dce171f603a8 234 {
lmsousa 1:0756a87e335f 235 int i,dias = 0;
lmsousa 1:0756a87e335f 236 i=ano1;
lmsousa 1:0756a87e335f 237 i++; /*O primeiro e o ultimo ano nao sao contabilizados. So os intermedios*/
lmsousa 1:0756a87e335f 238 while (i<ano2) {
lmsousa 1:0756a87e335f 239 dias = dias + dias_do_ano(i);
lmsousa 1:0756a87e335f 240 i++;
lmsousa 1:0756a87e335f 241 }
lmsousa 1:0756a87e335f 242 return dias;
lmsousa 0:dce171f603a8 243 }
lmsousa 0:dce171f603a8 244
lmsousa 1:0756a87e335f 245 int dias_ate_fim_ano(int ano,int mes,int dia)
lmsousa 0:dce171f603a8 246 {
lmsousa 1:0756a87e335f 247 return dias_ate_fim_mes(ano,mes,dia)+ dias_dos_meses_intermedios(ano,mes,13);
lmsousa 1:0756a87e335f 248 /* Calcula dias ate fim do ano. Como os extremos nao sao contabilizados
lmsousa 1:0756a87e335f 249 envia-se 13 para contabilizar Mes de Dezembro */
lmsousa 0:dce171f603a8 250 }
lmsousa 0:dce171f603a8 251
lmsousa 0:dce171f603a8 252 int dias_desde_principio_ano(int ano,int mes,int dia)
lmsousa 0:dce171f603a8 253 {
lmsousa 1:0756a87e335f 254 return dias_dos_meses_intermedios(ano,0,mes)+ dia;
lmsousa 1:0756a87e335f 255 /*Calcula dias desde principio do ano.
lmsousa 1:0756a87e335f 256 Como os extremos nao sao contabilizados
lmsousa 1:0756a87e335f 257 envia-se 0 para contabilizar Janeiro */
lmsousa 0:dce171f603a8 258 }
lmsousa 0:dce171f603a8 259
lmsousa 0:dce171f603a8 260 long int dif_data(int ano1,int mes1,int dia1,int ano2,int mes2,int dia2)
lmsousa 0:dce171f603a8 261 {
lmsousa 1:0756a87e335f 262 if (ano1 == ano2 && mes1 == mes2)
lmsousa 1:0756a87e335f 263 return dia2-dia1;
lmsousa 1:0756a87e335f 264 else if(ano1 == ano2 && mes1 != mes2)
lmsousa 1:0756a87e335f 265 return dias_ate_fim_mes(ano1,mes1,dia1) //Dias ate ao fim do 1o mes//
lmsousa 1:0756a87e335f 266 + dias_dos_meses_intermedios(ano1,mes1,mes2) //Dias dos meses intermedios//
lmsousa 1:0756a87e335f 267 + dia2; // Dias do ultimo mes //
lmsousa 0:dce171f603a8 268 else
lmsousa 1:0756a87e335f 269 return dias_ate_fim_ano(ano1,mes1,dia1)
lmsousa 1:0756a87e335f 270 + dias_dos_anos_intermedios(ano1,ano2) //Calcula dias dos anos intermedios//
lmsousa 1:0756a87e335f 271 + dias_desde_principio_ano(ano2,mes2,dia2);
lmsousa 0:dce171f603a8 272 }
lmsousa 0:dce171f603a8 273
lmsousa 3:add864dd8eab 274 int readkbd(void)
lmsousa 3:add864dd8eab 275 {
lmsousa 3:add864dd8eab 276 int value=0;
lmsousa 3:add864dd8eab 277 int ch=0;
lmsousa 3:add864dd8eab 278 int sair=0;
lmsousa 0:dce171f603a8 279
lmsousa 3:add864dd8eab 280 while (!sair) { //enquanto nao for enter, le
lmsousa 3:add864dd8eab 281 char ch = pc.getc();
lmsousa 3:add864dd8eab 282 if(ch >= '0' && ch <= '9') { // 0 .. 9?
lmsousa 3:add864dd8eab 283 value = (value * 10) + (ch - '0'); // sim, acumula
lmsousa 3:add864dd8eab 284 pc.putc(ch);
lmsousa 3:add864dd8eab 285 } else {
lmsousa 3:add864dd8eab 286 if (ch==13) sair=1;
lmsousa 3:add864dd8eab 287 //else if (ch==8) printf("\b");
lmsousa 3:add864dd8eab 288 else printf(">C%i<",ch);
lmsousa 3:add864dd8eab 289 }
lmsousa 3:add864dd8eab 290 }
lmsousa 3:add864dd8eab 291 printf("\r\nValor introduzido: %i",value);
lmsousa 3:add864dd8eab 292 return value;
lmsousa 3:add864dd8eab 293 }