leitura de arquivo .txt

1. leitura de arquivo .txt

César Frias
btc_cesar

(usa Fedora)

Enviado em 30/04/2008 - 15:54h

Boa tarde,
fiz um trabalho para a faculdade, onde eu tinha que gravar e ler um arquivo txt, se eu fizer a gravação e mandar ler, o programa roda normalmente, agora se eu fechar o programa e mandar ler, ele nao me retorna nada, ficando apenas o cursor piscando, tentei colocar uma variavel iniciada em zero e encrementa-la em um for para que me retornasse o seu valor, mas sempre era retornado lixo...

o codigo da função é esse:

void ler_txt(Tequipamento *equipamento, char NomeArquivo[])
{
FILE *Arq;
int i=0, j=0;
Arq = fopen(NomeArquivo, "rt");
for (i = 0; i < (*equipamento).qtd; i++)
{
printf("%i\n", &i);
fscanf(Arq, "%i" , &(*equipamento).equipamento[i].tipo_equip);
fscanf(Arq, "%i" , &(*equipamento).equipamento[i].ipqtd);
fscanf(Arq, "%i" , &(*equipamento).equipamento[i].ipesc);
for (j = 0; j < ((*equipamento).equipamento[i].ipqtd); j++)
fgets((*equipamento).equipamento[i].ip[j].ip, 15, Arq);
fgets((*equipamento).equipamento[i].nome_equip, 30,Arq);
fgets((*equipamento).equipamento[i].login, 30,Arq);
fgets((*equipamento).equipamento[i].nome_usuario, 50,Arq);
fgets((*equipamento).equipamento[i].mac, 1000,Arq);
fscanf(Arq, "%f", &(*equipamento).equipamento[i].consumo);
}
fclose(Arq);
}// fim ler txt

por favor me digam onde eu errei,

obrigado pela ajuda

César


  


2. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 30/04/2008 - 16:59h

vc precisa passar o código do programa todo.
O problema deve ser com o Tequipamento passado como referência que você deve estar inicializando em algum lugar no momento da gravação e no momento da leitura falta inicializar corretamente esse cara, alguma coisa assim. Se funciona o fluxo completo e depois não, então deve estar relacionado com este cara. Não vai adiantar somente incrementar o for, pois ele procura coisas dentro da estrutura. Passa o código todo ai.


3. Re: leitura de arquivo .txt

César Frias
btc_cesar

(usa Fedora)

Enviado em 02/05/2008 - 07:50h

po desculpa a demora

segue o codigo completo, ta um pouco grande... a parte de gravação e leitura de binario, nao precisa dar mt importancia, acredito que seja bem parecido com o txt :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
char ip[15];
}Tip;

typedef struct
{
char nome_equip[30];
char login[30];
char nome_usuario[50];
int tipo_equip;
float consumo;
char mac[1000];
int ipqtd;
int ipesc;
Tip ip[10];
int qtdeq;
}Tequip;

typedef struct
{
Tequip equipamento[100];
int qtd;
}Tequipamento;

void inserir(Tequipamento *equipamento)
{
int i, j;

printf("Quantos equipamentos deseja inserir: ");
scanf("%i", &(*equipamento).qtd);
fflush(stdin);
for (i = 0; i < (*equipamento).qtd; i++)
{
system("cls");
printf("Nome do equipamento: ");
gets((*equipamento).equipamento[i].nome_equip);
fflush(stdin);
printf("Login: ");
gets((*equipamento).equipamento[i].login);
fflush(stdin);
printf("Nome de usuario: ");
gets((*equipamento).equipamento[i].nome_usuario);
fflush(stdin);
printf("Escolha o tipo de equipamento:\n1 - Impressora\n2 - Notebook\n3 - Servidor\n4 - Desktop\n5 - Roteadores\n6 - Outros\n");
scanf("%i", &(*equipamento).equipamento[i].tipo_equip);
fflush(stdin);
while ((*equipamento).equipamento[i].tipo_equip > 6 || ((*equipamento).equipamento[i].tipo_equip < 1))
{
printf("Opcao incorreta\n");
printf("Escolha o tipo de equipamento:\n1 - Impressora\n2 - Notebook\n3 - Servidor\n4 - Desktop\n5 - Roteadores\n6 - Outros\n");
scanf("%i", &(*equipamento).equipamento[i].tipo_equip);
fflush(stdin);
}
printf("Entre com o MAC do equipamento: ");
gets((*equipamento).equipamento[i].mac);
fflush(stdin);
printf("Entre com o consumo de banda: ");
scanf("%f", &(*equipamento).equipamento[i].consumo);
fflush(stdin);
printf ("Entre com a quantidade de IP's: ");
scanf("%i", &(*equipamento).equipamento[i].ipqtd);
fflush(stdin);
while ((*equipamento).equipamento[i].ipqtd > 10)
{
printf("Escolha um numero menor que 10\n");
printf ("Entre com a quantidade de IP's: ");
scanf("%i", &(*equipamento).equipamento[i].ipqtd);
fflush(stdin);
}
printf("1 - DHCP\n2 - FIXO: ");
scanf("%i", &(*equipamento).equipamento[i].ipesc);
fflush(stdin);
while((*equipamento).equipamento[i].ipesc > 2 || (*equipamento).equipamento[i].ipesc < 1)
{
printf("Opcao incorreta\n");
printf("1 - DHCP\n2 - FIXO: ");
scanf("%i", &(*equipamento).equipamento[i].ipesc);
fflush(stdin);
}
for (j = 0; j < (*equipamento).equipamento[i].ipqtd; j++)
{
printf("Digite o %i ip: ", j+1);
gets((*equipamento).equipamento[i].ip[j].ip);
fflush(stdin);
}

system("cls");
printf("INSERCAO REALIZADA\n\n");
}
}// fim funcao iserir

void remover(Tequipamento *equipamento)
{
char nomeremov[30], nomeq[50];
int i, q=0;
printf("Equipamento a ser removido: ");
gets(nomeremov);
fflush(stdin);
for (i = 0; i < (*equipamento).qtd; i++)
{
if (strstr((*equipamento).equipamento[i].nome_equip, nomeremov) != NULL)
{
(*equipamento).equipamento[i] = (*equipamento).equipamento[(*equipamento).equipamento[i].qtdeq];
(*equipamento).equipamento[i].qtdeq--;
printf("Equipamento removido\n");
}
q++;
}
if (q == 0)
printf("Equipamento nao encontrado\n");

}
void alterar(Tequipamento *equipamento)
{
int i=0, j, q=0;
char nomequip[30], nomeq[50];
printf("Equipamento a ser alterarado: ");
gets(nomequip);
fflush(stdin);
for (i = 0; i < (*equipamento).qtd; i++)
{
if (strstr((*equipamento).equipamento[i].nome_equip, nomequip) != NULL)
{
printf("Entre com o novo nome: ");
gets((*equipamento).equipamento[i].nome_equip);
printf("Login: ");
gets((*equipamento).equipamento[i].login);
fflush(stdin);
printf("Nome de usuario: ");
gets((*equipamento).equipamento[i].nome_usuario);
fflush(stdin);
printf("Escolha o tipo de equipamento:\n1 - Impressora\n2 - Notebook\n3 - Servidor\n4 - Desktop\n5 - Roteadores\n6 - Outros\n");
scanf("%i", &(*equipamento).equipamento[i].tipo_equip);
fflush(stdin);
while ((*equipamento).equipamento[i].tipo_equip > 6 || ((*equipamento).equipamento[i].tipo_equip < 1))
{
printf("Opcao incorreta\n");
printf("Escolha o tipo de equipamento:\n1 - Impressora\n2 - Notebook\n3 - Servidor\n4 - Desktop\n5 - Roteadores\n6 - Outros\n");
scanf("%i", &(*equipamento).equipamento[i].tipo_equip);
fflush(stdin);
}
printf("Entre com o MAC do equipamento: ");
gets((*equipamento).equipamento[i].mac);
fflush(stdin);
printf("Entre com o consumo de banda: ");
scanf("%f", &(*equipamento).equipamento[i].consumo);
fflush(stdin);
printf ("Entre com a quantidade de IP's: ");
scanf("%i", &(*equipamento).equipamento[i].ipqtd);
fflush(stdin);
while ((*equipamento).equipamento[i].ipqtd > 10)
{
printf("Escolha um numero menor que 10\n");
printf ("Entre com a quantidade de IP's: ");
scanf("%i", &(*equipamento).equipamento[i].ipqtd);
fflush(stdin);
}
printf("1 - DHCP\n2 - FIXO: ");
scanf("%i", &(*equipamento).equipamento[i].ipesc);
fflush(stdin);
while((*equipamento).equipamento[i].ipesc > 2 || (*equipamento).equipamento[i].ipesc < 1)
{
printf("Opcao incorreta\n");
printf("1 - DHCP\n2 - FIXO: ");
scanf("%i", &(*equipamento).equipamento[i].ipesc);
fflush(stdin);
}
for (j = 0; j < (*equipamento).equipamento[i].ipqtd; j++)
{
printf("Digite o %i ip: ", j+1);
gets((*equipamento).equipamento[i].ip[j].ip);
fflush(stdin);
}

system("cls");
printf("ALTERACAO REALIZADA\n\n");
}
q++;
}
if (q == 0)
printf("Equipamento nao encontrado");
}
void listar_ip(Tequipamento equipamento)
{
char opcao, busca_nome[30], busca_ip[15];
int i, m=0, k=0, j;
printf("1 - Busca por nome\n2 - Busca por IP: ");
scanf("%i", &opcao);
fflush(stdin);
while (opcao < 1 || opcao > 2)
{
printf("Opcao Incorreta\n");
printf("1 - Busca por nome\n2 - Busca por IP: ");
scanf("%i", &opcao);
fflush(stdin);
}
if (opcao == 1)
{
printf("Digite o nome do equipamento: ");
gets(busca_nome);
fflush(stdin);
for (i = 0; i < equipamento.qtd; i++)
{
if (strstr((equipamento).equipamento[i].nome_equip, busca_nome) != NULL)
{
printf("%s\n%s\n", (equipamento.equipamento[i].nome_equip, equipamento.equipamento[i].nome_usuario));
for (j = 0; j < (equipamento).equipamento[i].ipqtd; j++)
{
printf("%s\n", (equipamento).equipamento[i].ip[j].ip);
m++;
}
}
}
if (m == 0)
printf("Maquina nao encontrada\n");
}
else
{
printf("Digite o IP do equipamento: ");
gets(busca_ip);
fflush(stdin);
for (i = 0; i < equipamento.qtd; i++)
for (j = 0; j < equipamento.equipamento[i].ipqtd; j++)
if(strstr(equipamento.equipamento[i].ip[j].ip, busca_ip) != NULL)
{
printf("%s\n%s\n", equipamento.equipamento[i].nome_equip, equipamento.equipamento[i].nome_usuario);
k++;
for (j = 0; j < (equipamento).equipamento[i].ipqtd; j++)
printf("%s\n", (equipamento).equipamento[i].ip[j].ip);
}
if (k == 0)
printf("IP nao encontrado\n");
}
system("pause");
system("cls");
}// fim listar ips

void mostrar_dados (Tequipamento equipamento)
{
char nome_equipamento[30];
int i, j, k=0;

for (i = 0; i < equipamento.qtd; i++)
{
printf("Digite o nome do equipamento: ");
gets(nome_equipamento);
if (strstr(equipamento.equipamento[i].nome_equip, nome_equipamento) != NULL)
{
printf("\t%s\n\t%s\n\t%s\n\t%i\n\t%.2f\n\t%s\n", (equipamento).equipamento[i].nome_equip, (equipamento).equipamento[i].login, (equipamento).equipamento[i].nome_usuario, (equipamento).equipamento[i].tipo_equip, (equipamento).equipamento[i].consumo, (equipamento).equipamento[i].mac);
if ((equipamento).equipamento[i].ipesc == 1)
printf ("\tDinamico\n");
else
printf ("\tFixo\n");
for (j = 0; j < (equipamento).equipamento[i].ipqtd; j++)
printf("\t%s\n", (equipamento).equipamento[i].ip[j].ip);
k++;
}
}
if (k == 0)
printf("Maquina nao encontrada\n");

system("pause");
system("cls");
}// fim mostrar dados

void listar_parte(Tequipamento equipamento)
{
char parte_ip[15];
int i, j=0;

printf("Entre com parte do IP: ");
gets(parte_ip);
fflush(stdin);
for (i = 0; i < equipamento.qtd; i++)
{
for (i = 0; i < equipamento.equipamento[i].ipqtd; i++)
if (strstr(equipamento.equipamento[i].ip[i].ip, parte_ip) != NULL)
{
printf("%s\n%s\n%s\n", equipamento.equipamento[i].login, equipamento.equipamento[i].nome_equip, equipamento.equipamento[i].ip[i].ip);
j++;
}
if (j == 0)
printf("IP nao encontrado\n");
}
system("pause");
system("cls");
}//fim da funçao listar parte


void listar_consumo(Tequipamento equipamento)
{
float banda1, banda2;
int i, j=0;

printf("Entre com o primeiro valor: ");
scanf("%f", &banda1);
printf("Entre com o segundo valor: ");
scanf("%f", &banda2);
for (i = 0; i < equipamento.qtd; i++)
{
if (equipamento.equipamento[i].consumo >= banda1 && equipamento.equipamento[i].consumo <= banda2 || equipamento.equipamento[i].consumo <= banda1 && equipamento.equipamento[i].consumo >= banda2)
printf("Nome do equipamento: %s\nNome de usuario: %s\n", equipamento.equipamento[i].nome_equip, equipamento.equipamento[i].nome_usuario);
j++;
}
if (j == 0)
printf("Nao ha maquinas nessa faixa de banda\n");
system("pause");
system("cls");
}// fim listar consumo

void listar_equip(Tequipamento *equipamento)
{
char* tipo_equip;
int i, j;
for (j = 0; j < (*equipamento).equipamento[i].qtdeq; j++)
{
switch ((*equipamento).equipamento[i].tipo_equip)
{
case 1: tipo_equip = "Impressora";
break;
case 2: tipo_equip = "Notebook";
break;
case 3: tipo_equip = "Servidor";
break;
case 4: tipo_equip = "Desktop";
break;
case 5: tipo_equip = "Roteadores";
break;
case 6: tipo_equip = "Outros";
break;
}
printf("\n\tEquipamento: %s\n\tLogin: %s\n\tNome de usuario: %s\n\tTipo: %s\n\tMAC: %s\n\tConsumo: %.2f\n\n", (*equipamento).equipamento[i].nome_equip,(*equipamento).equipamento[i].login, (*equipamento).equipamento[i].nome_usuario, tipo_equip, (*equipamento).equipamento[i].mac, (*equipamento).equipamento[i].consumo);
}
system("pause");
system("cls");
}//fim listar equipamento

void gravar_txt(Tequipamento equipamento, char NomeArquivo[])
{
FILE *Arq;
int i, j;
Arq = fopen(NomeArquivo, "wt");

for (i = 0; i < equipamento.qtd; i++)
{
fprintf(Arq, "%i\n", equipamento.equipamento[i].tipo_equip);
fprintf(Arq, "%i\n", equipamento.equipamento[i].ipqtd);
fprintf(Arq, "%i\n", equipamento.equipamento[i].ipesc);
for (j = 0; j < equipamento.equipamento[i].ipqtd; j++)
fprintf(Arq, "\%s\n", equipamento.equipamento[i].ip[j].ip, 15);
fprintf(Arq, "%s\n", equipamento.equipamento[i].nome_equip);
fprintf(Arq, "%s\n", equipamento.equipamento[i].login);
fprintf(Arq, "%s\n", equipamento.equipamento[i].nome_usuario);
fprintf(Arq, "%s\n", equipamento.equipamento[i].mac);
fprintf(Arq, "\n%.2f\n", equipamento.equipamento[i].consumo);
}
fclose(*Arq);
}// fim gravar txt

void ler_txt(Tequipamento *equipamento, char NomeArquivo[])
{
FILE *Arq;
int i=0, j=0;
Arq = fopen(NomeArquivo, "rt");
for (i = 0; i < (*equipamento).qtd; i++)
{
printf("%i\n", &i);
fscanf(Arq, "%i" , &(*equipamento).equipamento[i].tipo_equip);
fscanf(Arq, "%i" , &(*equipamento).equipamento[i].ipqtd);
fscanf(Arq, "%i" , &(*equipamento).equipamento[i].ipesc);
for (j = 0; j < ((*equipamento).equipamento[i].ipqtd); j++)
fgets((*equipamento).equipamento[i].ip[j].ip, 15, Arq);
fgets((*equipamento).equipamento[i].nome_equip, 30,Arq);
fgets((*equipamento).equipamento[i].login, 30,Arq);
fgets((*equipamento).equipamento[i].nome_usuario, 50,Arq);
fgets((*equipamento).equipamento[i].mac, 1000,Arq);
fscanf(Arq, "%f", &(*equipamento).equipamento[i].consumo);
}
fclose(*Arq);
}// fim ler txt

main ()
{
Tequipamento equipamento;
Tequip equip;
int opcao;

do
{
printf("***********************************************\n");
printf("* 1 -/-> Inserir *\n");
printf("* 2 -/-> Remover *\n");
printf("* 3 -/-> Alterar *\n");
printf("* 4 -/-> Listar equipamento do IP *\n");
printf("* 5 -/-> Mostrar dados de um equipamento *\n");
printf("* 6 -/-> Buscar por parte do IP *\n");
printf("* 7 -/-> Listar consumo de banda *\n");
printf("* 8 -/-> Listar equipamento *\n");
printf("* 9 -/-> Gravar arquivo texto *\n");
printf("* 10 -/-> Ler arquivo texto *\n");
printf("* 11 -/-> Gravar arquivo binario *\n");
printf("* 12 -/-> Ler arquivo binario *\n");
printf("* *\n");
printf("* 0 -/-> Sair *\n");
printf("***********************************************\n\n");
printf("Opcao: ");
scanf("%d", &opcao);
fflush(stdin);
system("cls");
switch (opcao)
{
case 1:inserir(&equipamento);
break;
case 2: remover(&equipamento);
break;
case 3: alterar(&equipamento);
break;
case 4: listar_ip(equipamento);
break;
case 5: mostrar_dados(equipamento);
break;
case 6: listar_parte(equipamento);
break;
case 7: listar_consumo(equipamento);
break;
case 8: listar_equip(&equipamento);
break;
case 9: gravar_txt(equipamento, "prog.txt");
printf("Gravacao realizada\n\n");
break;
case 10:ler_txt(&equipamento, "prog.txt");
printf("Leitura realizada\n\n");
break;
//case 11:gravar_binario(equip, "prog.cf");
// break;
//case 12:ler_binario(equip, "prog.cf");
// break; */
case 0: system("cls");
break;
default: printf("Opcao incorreta\n");
}// fim switch
}while (opcao != 0);
}//FIM DE Main



brigadao



4. ae

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 11:38h

pra compilar tive de mudar 2 locais que estavam.
fclose(*Arq); para fclose(Arq); (fclose recebe o ponteiro para o arquivo, quando sua variavel FILE já é um ponteiro, não tem necessidade de usar o * novamente, pois senão seria o valor da estrutura.

Agora to investigando e ja te falo.


5. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 11:56h

ta embassado são tantos erros no seu programa, vide exemplo:
void listar_equip(Tequipamento *equipamento)
{
char* tipo_equip;
int i, j;
for (j = 0; j < (*equipamento).equipamento[i].qtdeq; j++)
{
switch ((*equipamento).equipamento[i].tipo_equip)
{
case 1: tipo_equip = "Impressora";
break;
case 2: tipo_equip = "Notebook";
break;
case 3: tipo_equip = "Servidor";
break;
case 4: tipo_equip = "Desktop";
break;
case 5: tipo_equip = "Roteadores";
break;
case 6: tipo_equip = "Outros";
break;
}
printf("\n\tEquipamento: %s\n\tLogin: %s\n\tNome de usuario: %s\n\tTipo: %s\n\tMAC: %s\n\tConsumo: %.2f\n\n", (*equipamento).equipamento[i].nome_equip,(*equipamento).equipamento[i].login, (*equipamento).equipamento[i].nome_usuario, tipo_equip, (*equipamento).equipamento[i].mac, (*equipamento).equipamento[i].consumo);
}
system("pause");
system("cls");
}//fim listar equipamento

Ve-se que i não foi inicializada, e no loop você deveria estar usando j, com certeza não é correto. Modifiquei uma penca de coisa aqui e funcionou mas não alterei corretamente só pedaços.


6. Re: leitura de arquivo .txt

César Frias
btc_cesar

(usa Fedora)

Enviado em 02/05/2008 - 12:00h

cara tem como vc entrar pra papo direto??


7. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 12:06h

realmente falta inicializar a quantidade que é usada em diversos momentos do programa e por isto este erro.
Mudei as funções, como você não ta salvando a quantidade (poderia modificar o programa pra grava-la na primeira linha do txt), coloquei para ler a quantidade antes.

void ler_txt(Tequipamento *equipamento, char NomeArquivo[])
{
FILE *Arq;
int i=0, j=0;
printf("Quantos equipamentos quer ler: ");
scanf("%i", &(*equipamento).qtd);
fflush(stdin);

Arq = fopen(NomeArquivo, "rt");
for (i = 0; i < (*equipamento).qtd; i++)
{
printf("%i\n", &i);
fscanf(Arq, "%i" , &(*equipamento).equipamento[i].tipo_equip);
fscanf(Arq, "%i" , &(*equipamento).equipamento[i].ipqtd);
fscanf(Arq, "%i" , &(*equipamento).equipamento[i].ipesc);
for (j = 0; j < ((*equipamento).equipamento[i].ipqtd); j++)
fgets((*equipamento).equipamento[i].ip[j].ip, 15, Arq);
fgets((*equipamento).equipamento[i].nome_equip, 30,Arq);
fgets((*equipamento).equipamento[i].login, 30,Arq);
fgets((*equipamento).equipamento[i].nome_usuario, 50,Arq);
fgets((*equipamento).equipamento[i].mac, 1000,Arq);
fscanf(Arq, "%f", &(*equipamento).equipamento[i].consumo);
}
fclose(Arq);
}// fim ler txt

A outra parte é a exibição que pra ficar correta seria:

void listar_equip(Tequipamento *equipamento)
{
char* tipo_equip;
int i, j;
for (i = 0; i < (*equipamento).qtd; i++)
{
switch ((*equipamento).equipamento[i].tipo_equip)
{
case 1: tipo_equip = "Impressora";
break;
case 2: tipo_equip = "Notebook";
break;
case 3: tipo_equip = "Servidor";
break;
case 4: tipo_equip = "Desktop";
break;
case 5: tipo_equip = "Roteadores";
break;
case 6: tipo_equip = "Outros";
break;
}
printf("\n\tEquipamento: %s\n\tLogin: %s\n\tNome de usuario: %s\n\tTipo: %s\n\tMAC: %s\n\tConsumo: %.2f\n\n", (*equipamento).equipamento[i].nome_equip,(*equipamento).equipamento[i].login, (*equipamento).equipamento[i].nome_usuario, tipo_equip, (*equipamento).equipamento[i].mac, (*equipamento).equipamento[i].consumo);
}
system("pause");
system("cls");
}//fim listar equipamento

Lembrando ainda que ta LOTADO DE OUTROS BUGS, só de mexer um pouco no programa achei uma penca deles mas infelizmente não to com tempo pra corrigir todos pra você.

Ah, scanf é perigoso, cuidado...

BOA SORTE!


8. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 12:07h

não posso entrar em papo direto pois estou na empresa. Somente em casa mas é raro acessar web de casa. Vai postando aqui mesmo que respondo conforme possivel.


9. Re: leitura de arquivo .txt

César Frias
btc_cesar

(usa Fedora)

Enviado em 02/05/2008 - 12:09h

brigadao cara...

ainda nao olhei as modificações direito, mas com certeza ja vai ajudar bastante...

abs


10. cara

João Marcos Menezes
stremer

(usa Arch Linux)

Enviado em 02/05/2008 - 12:30h

dica: As modificações só servem para funcionar. Bem como todo seu programa só funciona se você usa-lo conforme se deve, senão começa a dar pau, principalmente por causa do gets e do scanf. Como falei, o correto é salvar a quantidade de informação no txt (e corretamente pq ta lendo errado as vezes não vi o problema ao certo), foi mais uma gambi pra armazenar o valor e começar a fazer a leitura.

Outra coisa, cuidado com gets e scanf pois permitem buffer overflow. Eu tenha a seguinte opnião, que pode parecer meio tosco mas todo modo grafico e até html mesmo, a leitura é toda de conteudo de texto. Depois faz a conversão. Pq não fazer a mesma coisa no C? Leitura de buffer todo em texto e depois converter no programa. Ai você implementa a validação que quiser. E sempre de preferência controlando o buffer. As vezes pode usar fgets, as vezes tem de ler caracter a caracter. E depois de validar se converte pro tipo desejado. BOA SORTE!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts