Duvida em c++

1. Duvida em c++

Tiago Melo
tiaggo_mello

(usa Nenhuma)

Enviado em 11/05/2008 - 04:03h

Olá! Estou implementando um programa em c++, e gostaria de saber se é possivel fazer o seguinte:

*pedir para q seja informado um valor numérico e não aceitar que seja digitado nada além disso. E caso seja digitado algo que não seja desse tipo(numerico), nem apareça na tela.

Se possivel aguardo resposta...

valeu...


  


2. Re: Duvida em c++

Rodrigo Ferreira Valentim
engos

(usa openSUSE)

Enviado em 12/05/2008 - 14:57h

Você precisa usar o comando get, trata-lo para ver se é ou não um númeor, depois refazer a tela com ou sem o caracter digitado, para cada caracter digitado. Dessa forma você controla o que está sendo apresentado na tela, podendo mostrar ou não o que foi digitado.


3. ae

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 13/05/2008 - 10:56h

cara, não precisa de tudo isso que o engos falou não. Tem como esconder o caracter que esta sendo digitado (no windows usando o conio e no linux usando o termios). Eu prefiro na maior parte das vezes ler como texto e depois verificar se é valido e dar uma mensagem se não for, mas você pode somente aceitar numeros (códigos asc de 48 a 57). Como um código fala mais que mil palavras, segue um código de uma entrada de dados numérica.
(ah o código roda tanto em win qto em linux)

#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 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) {
/* Numero lido */
putchar(chLido);
fflush(stdout);
numeroStr[strlen(numeroStr)] = chLido;
}
}
printf("\n");

// Ai convertemos para inteiro
int numero = atoi(numeroStr);
printf("Num: %d\n", numero);
return 0;
}



4. ah cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 13/05/2008 - 21:28h

só uma melhoria. Depois lembrei de uma coisa que você precisa tratar o backspace senão não consegue apagar os números.
Segue trecho do código, só substituir.
while (chLido != CHAR_ENTER && strlen(numeroStr) < 9) {
chLido = lerCarac();
if (chLido > 47 && chLido < 58) {
/* Numero lido */
putchar(chLido);
fflush(stdout);
numeroStr[strlen(numeroStr)] = chLido;
}
if (chLido == 127) {
printf("\b \b");
fflush(stdout);
if (strlen(numeroStr) > 0) {
numeroStr[strlen(numeroStr) - 1] = 0;
}
}
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts