stremer
(usa Arch Linux)
Enviado em 20/06/2008 - 17:16h
pra char é facil, basta observar os códigos asc... essa vou deixar de desafio pra vc ok, pq se pegar pronto você não vai aprender nada.
ah... fica abaixo um código do programa completo se quiser testar os números...
---- inicio numero.c ----
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#ifdef WIN32
#include <windows.h>
#include <conio.h>
#else
#include <termios.h>
#endif
#ifdef WIN32
#define CHAR_ENTER 13
#else
#define CHAR_ENTER 10
#endif
int isInt(char * texto)
{
char * ptTexto = texto;
int numero = 1;
while (*ptTexto != 0) {
// Use codigo asc dos numeros
if (*ptTexto < 48 || *ptTexto > 57) {
numero = 0;
}
ptTexto++;
}
return numero;
}
int isFloat(char * texto)
{
char * ptTexto = texto;
int numero = 1;
int ponto = 0;
while (*ptTexto != 0) {
// Use codigo asc dos numeros
if (*ptTexto < 48 || *ptTexto > 57) {
if (*ptTexto != 46) {
numero = 0;
}
}
if (*ptTexto == 46) {
if (ponto == 1) {
numero = 0;
}
ponto = 1;
}
ptTexto++;
}
if (ponto == 0) {
numero = 0;
}
return numero;
}
int lerCarac() {
int chLido;
#ifdef WIN32
chLido = getch();
#else
struct termios oldt, newt;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
chLido = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
#endif
return chLido;
}
int main(int argc, char *argv[])
{
// Vamos ler um numero de 9 (int 32 bits) posições em uma string primeiramente
char * numeroStr = malloc(sizeof(char) * 10);
// Limpar a string
int x = 0;
for (x = 0; x < 10; x++) {
numeroStr[x] = 0;
}
printf("Entre com o numero: ");
char chLido = 0;
while (chLido != CHAR_ENTER && strlen(numeroStr) < 9) {
chLido = lerCarac();
if ((chLido > 47 && chLido < 58) || chLido == 46) {
/* Numero lido */
putchar(chLido);
fflush(stdout);
numeroStr[strlen(numeroStr)] = chLido;
}
}
printf("\n");
printf("Int: %d\n", isInt(numeroStr));
printf("Float: %d\n", isFloat(numeroStr));
return 0;
}