Introdução
Neste laboratório, vamos escrever um programa em C que identifica se um número inserido pelo usuário é um inteiro ou um ponto flutuante (float). Este é um conceito fundamental em programação, onde diferentes tipos de dados têm diferentes requisitos de memória e comportamentos.
Vamos focar na detecção da presença de um ponto decimal na entrada para determinar se o número é um valor de ponto flutuante. Este laboratório apresenta a você o tratamento básico de strings em C, o processamento de entrada do usuário e a lógica condicional.
Ao final deste laboratório, você entenderá como:
- Ler a entrada do usuário como uma string em C
- Verificar a presença de caracteres específicos dentro de uma string
- Usar lógica condicional para tomar decisões com base na entrada
Criar e Abrir o Arquivo do Programa C
Vamos começar criando um novo arquivo C para o nosso programa. Vamos chamá-lo de main.c e colocá-lo no diretório do projeto.
- Primeiro, certifique-se de estar no diretório do projeto:
cd ~/project
Agora, no WebIDE, clique no menu "File" (Arquivo), selecione "New File" (Novo Arquivo) e nomeie-o como
main.c. Alternativamente, você pode usar o ícone "New File" (Novo Arquivo) na barra lateral do explorador de arquivos.O editor de arquivos abrirá automaticamente. Vamos adicionar os arquivos de cabeçalho (header files) necessários ao nosso programa:
#include <stdio.h>
#include <string.h>
Esses arquivos de cabeçalho são essenciais para o nosso programa:
stdio.hfornece funções para operações padrão de entrada e saída, comoprintf()escanf().string.hfornece funções para manipulação de strings, embora neste programa simples, vamos usá-lo principalmente para o cálculo do comprimento da string.
Observe que não incluímos conio.h como mencionado no modelo original. Isso ocorre porque conio.h não é uma biblioteca C padrão e não está disponível em muitos sistemas, incluindo nosso ambiente Ubuntu.
Adicionando a Função Principal e Declarando Variáveis
Agora que temos nossos arquivos de cabeçalho, vamos adicionar a função main() e declarar as variáveis que precisaremos para o nosso programa.
Adicione o seguinte código ao seu arquivo main.c:
int main() {
char number[20]; // Array para armazenar o número de entrada como uma string
int flag = 0; // Flag para rastrear se um ponto decimal foi encontrado (0 = não encontrado, 1 = encontrado)
int i; // Variável de contador de loop
// O programa continuará aqui...
return 0;
}
Vamos entender essas variáveis:
number[20]: Este é um array de caracteres (string) que armazenará a entrada do usuário. Aumentamos o tamanho para 20 caracteres para acomodar números maiores.flag: Esta variável inteira atuará como uma flag booleana. Se encontrarmos um ponto decimal na entrada, definiremos isso como 1.i: Uma variável de contador simples para nosso loop.
A função main() é o ponto de entrada do nosso programa C. Todo o código que escreveremos estará dentro desta função. A instrução return 0 no final indica que o programa foi executado com sucesso.
Seu arquivo agora deve ter a seguinte aparência:
#include <stdio.h>
#include <string.h>
int main() {
char number[20]; // Array para armazenar o número de entrada como uma string
int flag = 0; // Flag para rastrear se um ponto decimal foi encontrado (0 = não encontrado, 1 = encontrado)
int i; // Variável de contador de loop
// O programa continuará aqui...
return 0;
}
Implementando a Lógica do Programa
Agora, vamos adicionar o código restante para ler a entrada do usuário e determinar se o número é um inteiro ou um float.
Substitua o comentário "O programa continuará aqui..." pelo seguinte código:
// Solicita ao usuário que insira um número
printf("Digite um número: ");
scanf("%s", number);
// Verifica cada caractere na string do número em busca de um ponto decimal
for(i = 0; number[i] != '\0'; i++) {
if(number[i] == '.') {
flag = 1; // Define a flag como 1 se o ponto decimal for encontrado
break;
}
}
// Exibe o resultado com base no valor da flag
if(flag) {
printf("O número inserido é um número de ponto flutuante.\n");
} else {
printf("O número inserido é um número inteiro.\n");
}
Vamos examinar o que este código faz:
- A instrução
printf()exibe um prompt pedindo ao usuário para inserir um número. - A função
scanf()lê a entrada do usuário como uma string e a armazena no arraynumber. - Usamos um loop
forpara iterar por cada caractere da string até atingirmos o terminador nulo ('\0'). - Dentro do loop, verificamos se cada caractere é um ponto decimal (
'.'). Se encontrado, definimos aflagcomo 1 e saímos do loop. - Finalmente, usamos uma instrução
ifpara verificar se aflagestá definida. Se estiver, informamos ao usuário que o número é um ponto flutuante; caso contrário, é um inteiro.
Seu programa completo agora deve ter a seguinte aparência:
#include <stdio.h>
#include <string.h>
int main() {
char number[20]; // Array para armazenar o número de entrada como uma string
int flag = 0; // Flag para rastrear se um ponto decimal foi encontrado (0 = não encontrado, 1 = encontrado)
int i; // Variável de contador de loop
// Solicita ao usuário que insira um número
printf("Digite um número: ");
scanf("%s", number);
// Verifica cada caractere na string do número em busca de um ponto decimal
for(i = 0; number[i] != '\0'; i++) {
if(number[i] == '.') {
flag = 1; // Define a flag como 1 se o ponto decimal for encontrado
break;
}
}
// Exibe o resultado com base no valor da flag
if(flag) {
printf("O número inserido é um número de ponto flutuante.\n");
} else {
printf("O número inserido é um número inteiro.\n");
}
return 0;
}
Compilando e Executando o Programa
Agora que escrevemos nosso programa, vamos compilá-lo e executá-lo para vê-lo em ação.
Primeiro, salve o arquivo se ainda não o fez (Ctrl+S ou Arquivo > Salvar).
Abra um terminal no WebIDE (se ele ainda não estiver aberto).
Navegue até o diretório do projeto e compile o programa usando o compilador GCC:
cd ~/project
gcc main.c -o main
O comando gcc compila nosso arquivo fonte C, e a opção -o main especifica que o executável de saída deve ser chamado main.
- Agora execute o programa compilado:
./main
- Quando solicitado, insira um número. Tente um inteiro primeiro, como
42:
Digite um número: 42
Você deve ver a saída:
O número inserido é um número inteiro.
- Execute o programa novamente e tente um número de ponto flutuante como
3.14:
./main
Digite um número: 3.14
Você deve ver a saída:
O número inserido é um número de ponto flutuante.
O programa identifica corretamente inteiros e números de ponto flutuante com base na presença de um ponto decimal na entrada.
Aprimorando o Programa
Vamos aprimorar nosso programa para torná-lo mais amigável e robusto. Adicionaremos um loop para que o usuário possa verificar vários números sem reiniciar o programa, e também adicionaremos validação de entrada.
Atualize seu arquivo main.c com o seguinte código:
#include <stdio.h>
#include <string.h>
#include <ctype.h> // Para a função isdigit
int main() {
char number[20];
int flag, i;
char choice;
do {
flag = 0; // Reinicia a flag para cada iteração
// Solicita ao usuário que insira um número
printf("\nDigite um número: ");
scanf("%s", number);
// Validação da entrada - verifica se a entrada contém apenas dígitos e no máximo um ponto decimal
int valid = 1;
int decimal_count = 0;
for(i = 0; number[i] != '\0'; i++) {
if(number[i] == '.') {
decimal_count++;
if(decimal_count > 1) {
valid = 0;
break;
}
} else if(!isdigit(number[i])) {
valid = 0;
break;
}
}
if(!valid) {
printf("Entrada inválida! Por favor, insira um número válido.\n");
continue;
}
// Verifica se o número é inteiro ou float
for(i = 0; number[i] != '\0'; i++) {
if(number[i] == '.') {
flag = 1;
break;
}
}
// Exibe o resultado
if(flag) {
printf("O número inserido é um número de ponto flutuante.\n");
} else {
printf("O número inserido é um número inteiro.\n");
}
// Pergunta se o usuário deseja continuar
printf("\nDeseja verificar outro número? (s/n): ");
scanf(" %c", &choice);
} while(choice == 'y' || choice == 'Y');
printf("\nObrigado por usar o programa!\n");
return 0;
}
Esta versão aprimorada inclui:
- Um loop
do-whileque permite ao usuário verificar vários números. - Validação de entrada para garantir que a entrada contenha apenas dígitos e no máximo um ponto decimal.
- Uma interface mais amigável com prompts e feedback mais claros.
Compile e execute esta versão aprimorada:
cd ~/project
gcc main.c -o main
./main
Teste-o com várias entradas, incluindo:
- Números inteiros como
42 - Números de ponto flutuante como
3.14 - Entradas inválidas como
abcou1.2.3
O programa deve lidar adequadamente com todos esses casos e permitir que você continue verificando números até que você escolha sair.
Resumo
Neste laboratório, você criou com sucesso um programa em C que determina se um número inserido pelo usuário é um inteiro ou um número de ponto flutuante. Aqui estão os principais conceitos que você aprendeu:
Manipulação de Strings em C (String Handling in C): Você usou arrays de caracteres para armazenar e processar dados de string, iterando por cada caractere para verificar suas propriedades.
Processamento de Entrada do Usuário (User Input Processing): Você aprendeu a solicitar e ler a entrada do usuário usando a função
scanf().Estruturas de Controle (Control Structures): Você implementou instruções condicionais (
if-else) e loops (for,do-while) para controlar o fluxo do seu programa.Validação de Entrada (Input Validation): Na versão aprimorada, você adicionou verificações para garantir que a entrada do usuário seja um número válido.
Aprimoramento do Programa (Program Enhancement): Você aprimorou o programa básico adicionando recursos como um loop do usuário e validação de entrada, tornando-o mais robusto e amigável.
Esses conceitos são fundamentais para muitas tarefas de programação e servirão como uma base sólida à medida que você continua aprendendo a programar em C. A capacidade de distinguir entre diferentes tipos de dados é particularmente importante em linguagens fortemente tipadas como C, onde diferentes tipos de dados têm diferentes alocações de memória e comportamentos.



