Programita hecho por mi, que lee un numero (la variable de tipo string), saca digito por digito y va comprobando, se encuentra con problematicas como tener un signo + o - delante, con problematicas como que empieze con 0, que tenga letras, que tenga puntos etc.
Gran utilidad para cuando estamos esperando un integer, y nos ingresan un string, donde el programa siempre se termina cerrando.
Saludos! Mario Olivera.
PD: se puede hacer un archivo .h para C++ e implementarlo para cada variable
Código en pascal (despues dejaré el de C++)
Código
program hki; Uses crt; var (*VARIABLES PARA EL PASAJE DE STRING INTEGER!*) ladoDelCuadrado:integer; cantidadDeCaracteres:integer; auxCantidadCaracteres:integer; multiplicador,resultado:integer; auxNumero:string; caracter:char; i:integer; polaridad:boolean; interruptor:boolean; cambioPolaridad:boolean; respuesta:boolean; (*VARIABLES PARA DIBUJAR EL CUADRADO!*) anchoUno:integer; cantidadDeLineas:integer; auxAncho:integer; BEGIN ClrScr; i:=1; interruptor:= false; (* si los varoles son correctos esta en true, cuando entra a un else de algun case se apaga y asi queda*) polaridad:= true; (* Numero positivo*) cambioPolaridad:=false; respuesta:= true; write('Ingrese el lado del cuadrado: '); readLn(auxNumero); (*Lee el numero string*) cantidadDeCaracteres:=length(auxNumero); multiplicador:= 10; ladoDelCuadrado:= 0; resultado:= 10; while (interruptor <> true) do begin interruptor:= true; if (cantidadDeCaracteres = 1) then begin caracter:= auxNumero[1]; case caracter of '0': begin ladoDelCuadrado:= 0; end; '1': begin ladoDelCuadrado:= 1; end; '2': begin ladoDelCuadrado:= 2; end; '3': begin ladoDelCuadrado:= 3; end; '4': begin ladoDelCuadrado:= 4; end; '5': begin ladoDelCuadrado:= 5; end; '6': begin ladoDelCuadrado:= 6; end; '7': begin ladoDelCuadrado:= 7; end; '8': begin ladoDelCuadrado:= 8; end; '9': begin ladoDelCuadrado:= 9; end; else begin interruptor:= false; end end; end else begin while (i < cantidadDeCaracteres) do (*Me Falta sumar el ultimo digito itera 4 veces*) begin caracter:= auxNumero[1]; if (i = 1) then begin if (caracter = '+') then begin auxNumero:= copy(auxNumero,2,cantidadDecaracteres); end; if (caracter = '-') then begin auxNumero:= copy(auxNumero,2,cantidadDecaracteres); interruptor:= false; polaridad:= false; (* SE PONE EN MENOS*) cambioPolaridad:= true; end; end; caracter:= auxNumero[i]; (*if (interruptor <> false) then begin*) case caracter of '0': begin if ((auxNumero[1]) <> '+') or ((auxNumero[1]) <> '-') then begin if (i > 1) then begin ladoDelCuadrado:= ladoDelCuadrado + ( 0 * resultado); end; end else begin if (i > 2) then begin ladoDelCuadrado:= ladoDelCuadrado + ( 0 * resultado); end; end; end; '1': begin ladoDelCuadrado:= ladoDelCuadrado + ( 1 * resultado); end; '2': begin ladoDelCuadrado:= ladoDelCuadrado + ( 2 * resultado); end; '3': begin ladoDelCuadrado:= ladoDelCuadrado + ( 3 * resultado); end; '4': begin ladoDelCuadrado:= ladoDelCuadrado + ( 4 * resultado); end; '5': begin ladoDelCuadrado:= ladoDelCuadrado + ( 5 * resultado); end; '6': begin ladoDelCuadrado:= ladoDelCuadrado + ( 6 * resultado); end; '7': begin ladoDelCuadrado:= ladoDelCuadrado + ( 7 * resultado); end; '8': begin ladoDelCuadrado:= ladoDelCuadrado + ( 8 * resultado); end; '9': begin ladoDelCuadrado:= ladoDelCuadrado + ( 9 * resultado); end else begin respuesta:=false; end; end; (*end;*) resultado:= resultado * 10; i:= i + 1; end; end; (* SACANDO EL ULTIMO DIGITO POR FIN! *) if (cantidadDeCaracteres <> 1) then begin if (cambioPolaridad = true) then begin cantidadDeCaracteres:= cantidadDeCaracteres + 1; caracter:= auxNumero[cantidadDeCaracteres]; end else begin caracter:= auxNumero[cantidadDeCaracteres]; end; case caracter of '1','2','3','4','5','6','7','8','9','0': begin end; else begin respuesta:= false; end; end; if (interruptor = true) and (respuesta = true) and (ladoDelcuadrado > 9) then begin if (cambioPolaridad = true) then begin cantidadDeCaracteres:= cantidadDeCaracteres + 1; caracter:= auxNumero[cantidadDeCaracteres]; end else begin caracter:= auxNumero[cantidadDeCaracteres]; end; case caracter of '1': begin ladoDelCuadrado:= ladoDelCuadrado + 1; end; '2': begin ladoDelCuadrado:= ladoDelCuadrado + 2; end; '3': begin ladoDelCuadrado:= ladoDelCuadrado + 3; end; '4': begin ladoDelCuadrado:= ladoDelCuadrado + 4; end; '5': begin ladoDelCuadrado:= ladoDelCuadrado + 5; end; '6': begin ladoDelCuadrado:= ladoDelCuadrado + 6; end; '7': begin ladoDelCuadrado:= ladoDelCuadrado + 7; end; '8': begin ladoDelCuadrado:= ladoDelCuadrado + 8; end; '9': begin ladoDelCuadrado:= ladoDelCuadrado + 9; end end; end else begin writeln('No ingreses valores torpes o(-.-)o: '); write('Ingrese el lado del cuadrado: '); readLn(auxNumero); i:=1; interruptor:= false; polaridad:= true; (* Numero positivo*) cambioPolaridad:=false; respuesta:= true; cantidadDeCaracteres:=length(auxNumero); multiplicador:= 10; ladoDelCuadrado:= 0; resultado:= 10; end; end else (*SI TIENE 1 CARACTER*) begin if(interruptor = false) then begin writeln('No ingreses valores torpes o(-.-)o: '); write('Ingrese el lado del cuadrado: '); readLn(auxNumero); i:=1; interruptor:= false; polaridad:= true; (* Numero positivo*) cambioPolaridad:=false; respuesta:= true; cantidadDeCaracteres:=length(auxNumero); multiplicador:= 10; ladoDelCuadrado:= 0; resultado:= 10; end; end; end; (*FIN WHILE*) (*YA TENDRIA EL VALOR INTEGER*) writeln('Valor: ',ladoDelCuadrado); (*ESCRITURA DEL CUADRADO!!!! POR FIN -.- *) auxAncho:=0; anchoUno:= 0; cantidadDeLineas:=1; if (ladoDelCuadrado = 1) then begin writeLn('*'); end else begin while (anchoUno <> ladoDelCuadrado) do begin write('*'); anchoUno:= anchoUno + 1; end; anchoUno:= 0; writeLn(' '); while ((ladoDelCuadrado >= 3) and ( cantidadDeLineas <= (ladoDelCuadrado - 2))) do begin write('*'); while (auxAncho < (ladoDelCuadrado -2)) do begin write(' '); auxAncho:= auxAncho + 1; end; auxAncho:= 0; writeLn('*'); cantidadDeLineas:= cantidadDeLineas + 1; end; while (anchoUno <> ladoDelCuadrado) do begin write('*'); anchoUno := anchoUno + 1; end; writeLn(' '); end; readkey; END.