Ajuda em C

1. Ajuda em C

Black Mamba
BlackMamba

(usa Linux Mint)

Enviado em 31/10/2012 - 21:48h

Pessoal, tô com um probs...
Essa pequena agenda ta entrando em loop infinito nas consultas e na impressão e não ta excluindo corretamente.

Sei o que ta faltando, que é um comparador, para realizar a parada...mas ta osso, ja fiz de tudo e deu pau.

Alguém pode me ajudar.

valeu

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

void menu(){
system("cls");
printf(" 1 - Inserir um nome na Lista\n");
printf(" 2 - Pesquisar um nome na lista.\n");
printf(" 3 - Imprimir todos os nomes\n");
printf(" 4 - Pesquisar por aproximacao\n");
printf(" 5 - Excluir usuario\n");
printf(" 6 - Sair\n");
printf(" Digite a opcao desejada: ");
}

int main(){

int opcao;
FILE * arquivo;
char nomeArquivo[100];
char nome[100], pesquisa[100];

printf("Digite o nome do arquivo com .txt: ");
scanf("%s", nomeArquivo);

arquivo = fopen(nomeArquivo, "a");

if(arquivo == NULL){
printf("Erro na abertura do arquivo!!! ");
exit(0);
}else {
do {
menu();
scanf("%d", &opcao);

switch(opcao) {

case 1: // inserir um nome

printf("Digite um nome: ");
scanf("%s", nome); // leitura do nome pelo teclado
fprintf(arquivo, "%s\n", nome); // escreve o nome no arquivo
fflush(arquivo);
printf("O nome foi inserido com sucesso!\n");
getchar();
break;

case 2: // pesquisar um nome no arquivo

printf("Digite um nome para buscar: ");
scanf("%s", pesquisa);
fflush(stdin);
rewind(arquivo); // move o ponteiro para o inicio do arquivo
while (!feof(arquivo)) {
fscanf(arquivo, "%s", nome);
if (strcmp(nome,pesquisa)==0) {
printf("ACHOUUUU");
printf("%s\n", nome);
}
}
getchar();
break;

case 3: // Listar todo o conteúdo do arquivo

rewind(arquivo); // move o ponteiro para o inicio do arquivo
while (!feof(arquivo)) {
fscanf(arquivo, "%s", nome);
printf("%s \n", nome);
}
getchar();
break;

case 4: // Buscar um registro por aproximação ?????????????
//if
printf("Digite um numero para buscar por aproximacao: ");
scanf("%20s", nome);
fflush(stdin);
getchar();
break;

case 5: // excluir um registro do arquivo

printf("Digite um numero do registro para excluir: ");
scanf("%20s", nome);
fflush(stdin);
getchar();
break;
}
}while(opcao != 6);

fclose(arquivo); // fecha o arquivo
}
}



  


2. Re: Ajuda em C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 01/11/2012 - 01:29h

E nesse loop infinito, o que ele imprime?

A condição de parada do seu loop poderia ser a seguinte: while(fscanf(arquivo, "%s", nome)==1).


3. Re: Ajuda em C

Black Mamba
BlackMamba

(usa Linux Mint)

Enviado em 01/11/2012 - 08:19h

paulo1205 escreveu:

E nesse loop infinito, o que ele imprime?

A condição de parada do seu loop poderia ser a seguinte: while(fscanf(arquivo, "%s", nome)==1).


Então Paulo...
Ele imprime o ultimo nome inserido...

Onde iria entrar o while(fscanf(arquivo, "%s", nome)==1).


4. Re: Ajuda em C

Perfil removido
removido

(usa Nenhuma)

Enviado em 01/11/2012 - 10:49h

Por acaso o arquivo txt que tu tenta ler possui espaços? (e.g. Teste de texto.txt)


5. Re: Ajuda em C

Black Mamba
BlackMamba

(usa Linux Mint)

Enviado em 01/11/2012 - 10:51h

leolfm escreveu:

Por acaso o arquivo txt que tu tenta ler possui espaços? (e.g. Teste de texto.txt)


não... ao compilar ele pede pra vc criar o arquivo. Ex: aula.txt

O erro ta nas condições de parada, que eu não consegui fazer


6. Re: Ajuda em C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 01/11/2012 - 10:53h

No lugar do while que já existe hoje. Você faz o seguinte.

while(!feof(arquivo)){
/* ... */
fscanf(arquivo, "%s", nome);
/* ... */
}


Você pode seguramente -- e com vantagens -- trocar isso por.

while(fscanf(arquivo, "%s", nome)==1){
/* ... */
}



7. Re: Ajuda em C

Black Mamba
BlackMamba

(usa Linux Mint)

Enviado em 01/11/2012 - 11:02h

paulo1205 escreveu:

No lugar do while que já existe hoje. Você faz o seguinte.

while(!feof(arquivo)){
/* ... */
fscanf(arquivo, "%s", nome);
/* ... */
}


Você pode seguramente -- e com vantagens -- trocar isso por.

while(fscanf(arquivo, "%s", nome)==1){
/* ... */
}


Paulo, vou ter de testar qdo chegar em casa, aqui no trampo bloqueia tudo...a noite te dou uma resposta

Qual seria a vantagem em fazer esta troca??


8. Re: Ajuda em C

Black Mamba
BlackMamba

(usa Linux Mint)

Enviado em 01/11/2012 - 18:02h

Bom, Paulo fiz a substituição...
O loop infinito parou, mas não executa o processo de listagem e consultas.

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

void menu(){
system("cls");
printf(" 1 - Inserir um nome na Lista\n");
printf(" 2 - Pesquisar um nome na lista.\n");
printf(" 3 - Imprimir todos os nomes\n");
printf(" 4 - Pesquisar por aproximacao\n");
printf(" 5 - Excluir usuario\n");
printf(" 6 - Sair\n");
printf(" Digite a opcao desejada: ");
}

int main(){

int opcao;
FILE * arquivo;
char nomeArquivo[100];
char nome[100], pesquisa[100];

printf("Digite o nome do arquivo com .txt: ");
scanf("%s", nomeArquivo);

arquivo = fopen(nomeArquivo, "a");

if(arquivo == NULL){
printf("Erro na abertura do arquivo!!! ");
exit(0);
}else {
do {
menu();
scanf("%d", &opcao);

switch(opcao) {

case 1: // inserir um nome
printf("Digite um nome: ");
scanf("%s", nome); // leitura do nome pelo teclado
fprintf(arquivo, "%s\n", nome); // escreve o nome no arquivo
fflush(arquivo);
printf("O nome foi inserido com sucesso!\n");
getchar();
break;

case 2: // pesquisar um nome no arquivo
printf("Digite um nome para buscar: ");
scanf("%s", pesquisa);
fflush(stdin);
rewind(arquivo); // move o ponteiro para o inicio do arquivo
while(fscanf(arquivo, "%s", nome)==1){
if (strcmp(nome, pesquisa)==0) {
printf("ACHOUUUU");
printf("%s\n", nome);
}
}
getchar();
break;

case 3: // Listar todo o conteúdo do arquivo
rewind(arquivo); // move o ponteiro para o inicio do arquivo
while(fscanf(arquivo, "%s", nome)==1){
printf("%s \n", nome);
}
getchar();
break;

case 4: // Buscar um registro por aproximação ?????????????
printf("Digite um numero para buscar por aproximacao: ");
scanf("%20s", nome);
fflush(stdin);
getchar();
break;

case 5: // excluir um registro do arquivo
printf("Digite um numero do registro para excluir: ");
scanf("%20s", nome);
fflush(stdin);
getchar();
break;
}
}while(opcao != 6);

fclose(arquivo); // fecha o arquivo
}
}



9. Re: Ajuda em C

Paulo
paulo1205

(usa Ubuntu)

Enviado em 02/11/2012 - 13:08h

Acho que seria melhor de você descrevesse melhor esse não funcionamento. Pelo que eu vejo ali, não há mesmo muito a executar: pergunta-se o nome, e nada mais.


10. Re: Ajuda em C

Black Mamba
BlackMamba

(usa Linux Mint)

Enviado em 03/11/2012 - 18:54h

paulo1205 escreveu:

Acho que seria melhor de você descrevesse melhor esse não funcionamento. Pelo que eu vejo ali, não há mesmo muito a executar: pergunta-se o nome, e nada mais.


Pois é...é ai o problema, ele deveria listar os nomes no case2, case3 e no case4 e no case5, excluir o nome infomrado.




11. Re: Ajuda em C

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 03/11/2012 - 20:10h

Tenta ai:


case 3: // Listar todo o conteúdo do arquivo
rewind(arquivo); // move o ponteiro para o inicio do arquivo
while(fgets(nome, 99, arquivo)){
printf("%s \n", nome);
}
getchar();
break;





12. Re: Ajuda em C

Reginaldo de Matias
saitam

(usa Slackware)

Enviado em 03/11/2012 - 20:11h

crie funções para inserir, listar e excluir que resolve o problema.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts