Ir ao conteúdo
  • Cadastre-se
Hitalo Vinicius

Fgets bugando código que funciona com fscanf

Recommended Posts

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

main(){
	setlocale(LC_ALL,"portuguese");
	
	int menu;
	char vetor1[100], vetor2[100],vetor3[100],vetor4[100],vetor5[100];
	int n, i=0,j=0,k=0,fechar=0;
	char produto[100],preco[10];
	
	FILE * arquivo;
	
	arquivo = fopen ("produtos.txt" , "r+");
	
	FILE * arquivo2;
	
	arquivo2 = fopen ("precos.txt" , "r+");
	
	FILE * arquivo3;
	
	arquivo3 = fopen ("precos2.txt" , "r+");
	
	
	
	while(fechar==0){
		
		printf(" ___________________________________________________________________\n");
		printf("|                                                                   |\n");
		printf("|                     PARA ADCIONAR UM ITEM DIGITE 1                |\n");
		printf("|                          _ _ _ _ _ _ _ _                          |\n");
		printf("|                                                                   |\n");
		printf("|                     PARA PROCURAR UM ITEM DIGITE 2                |\n");
		printf("|                          _ _ _ _ _ _ _ _                          |\n");
		printf("|                                                                   |\n");
		printf("|PARA PROCURAR UM ITEM QUE COMECE COM AS 3 PRIMEIRAS LETRAS DIGITE 3|\n");
		printf("|                          _ _ _ _ _ _ _ _                          |\n");
		printf("|                                                                   |\n");	
		printf("|                PARA EDITAR O PREÇO DE UM ITEM DIGITE 4            |\n");
		printf("|                          _ _ _ _ _ _ _ _                          |\n");
		printf("|                                                                   |\n");	
		printf("|                PARA MOSTRAR TODOS OS PRODUTOS DIGITE 5            |\n");
		printf("|                          _ _ _ _ _ _ _ _                          |\n");
		printf("|                                                                   |\n");
		printf("|                        PARA SAIR DIGITE 6                         |\n");
		printf("|___________________________________________________________________|\n\n");
			
		scanf("%d",&menu);
		
		
		fscanf (arquivo2, "%d", &n);
		fscanf (arquivo, "%d", &n);
		
			
		if(menu == 1 || menu == 2 || menu == 3 || menu == 4 || menu == 5 || menu == 6){
			
			switch(menu){
					case 1:
						
						
						while(i!=n){
							
							fgets(vetor1, 100 , arquivo);
							fgets(vetor2, 100 , arquivo2);
							
							
							//fscanf (arquivo, "%s\n" ,vetor1);
							//fscanf (arquivo2, "%s\n" ,vetor2);
							//printf("%s   ...........................%7s\n\n",vetor1,vetor2);
							
							i++;
						
						}
						
						printf("INFORME O PRODUTO\n");
						gets(vetor1);
						fprintf(arquivo,"\n%s",vetor1);
						
						printf("INFORME O VALOR\n");
						scanf("%s",vetor2);
						fprintf(arquivo2,"\n%s",vetor2);
						
						fseek(arquivo, 0, 0);
						n=n+1;
						fprintf (arquivo, "%d", n);
						
						
						
						
						fechar=0;
						
						system ("pause");
						system ("cls");
						break;
						
					case 2:
						printf("\n\nDIGITE O NOME CORRETO DO PRODUTO:\n");
							
						scanf("%s",vetor3);
						
						while(i!=n){
							
							
							fgets(vetor1, 100 , arquivo);
							fgets(vetor2, 100 , arquivo2);
							
							
							//fscanf (arquivo, "%s" ,vetor1);
							//fscanf (arquivo2, "%s" ,vetor2);
							
							
							if(strcmp(vetor1,vetor3)==0){
								
								printf("%s   ...........................%7s\n\n",vetor1,vetor2);
								j=1;
							}
							
							i++;
						
						}
						
						if(j==0){
							printf("ITEM NÃO ENCONTRADO!\n");
						}
						
						
						
						
						fechar=0;
						
						system ("pause");
						system ("cls");
						break;
						
					case 3:
						printf("\n\nDIGITE AS 3 PRIMEIRAS LETRAS DO PRODUTO:\n");
						
						gets(vetor3);
							
						//scanf("%s",vetor3);
						
						while(i!=n){
							
							
							
							fgets(vetor1, 100 , arquivo);
							fgets(vetor2, 100 , arquivo2);
							
							//fscanf (arquivo, "%s" ,vetor1);
							//fscanf (arquivo2, "%s" ,vetor2);
							
							
							if(vetor1[0] == vetor3[0] && vetor1[1] == vetor3[1] && vetor1[2] == vetor3[2]){
								
								printf("%s   ...........................%7s\n\n",vetor1,vetor2);
								j=1;
							}
							
							
							
							i++;
						
						}
						
						if(j==0){
							printf("ITENS NÃO ENCONTRADOS!\n");
						}
						
						
						
						fechar=0;
						
						
						system ("pause");
						system ("cls");
						break;
							
			
					case 4:
						
						printf("QUAL ITEM DESEJA MUDAR O PREÇO?\n");
						
						gets(vetor3);
						//scanf("%s",vetor3);
						
						while(i!=n){
						
							fgets(vetor4, 100 , arquivo);
							fgets(vetor1, 100 , arquivo2);
						
							//fscanf(arquivo, "%s",vetor4);
							//fscanf(arquivo2, "%s",vetor1);
						
							if(strcmp(vetor3,vetor4)==0){
								printf("\nESTE É O PREÇO ATUAL DO PRODUTO:\n");
								printf("%s   ...........................%7s\n\n",vetor4,vetor1);
								printf("QUAL O NOVO PREÇO?\n");
								gets(vetor5);
								//scanf("%s",vetor5);
								fprintf(arquivo3, "%s\n",vetor5);
							}
							
							else{
								fprintf(arquivo3,"%s\n",vetor1);	
							}
							
							
						
						i++;
						}
					
						i=0;
						
						fseek(arquivo2, 0, 0);
						fseek(arquivo3, 0, 0);
						
						while(i!=n+1){
							
							if(i==0){
								fprintf(arquivo2 , "00\n" , vetor1);
							}
							else{
								
								fgets(vetor1, 100 , arquivo3);
								//fscanf(arquivo3, "%s\n" , vetor1);
								fprintf(arquivo2 , "%s\n" , vetor1);
								
							}
							
							i++;
							
						}
						
						
						
						fechar=0;
						
						system ("pause");
						system ("cls");
					break;
					
					case 5:
							
						while(i!=n){
							
							fgets(vetor1, 100 , arquivo);
							fgets(vetor2, 100 , arquivo2);
							
							//fscanf (arquivo, "%s" ,vetor1);
							//fscanf (arquivo2, "%s" ,vetor2);
							
						//	printf("%s",vetor1);
						//	printf("%s",vetor2);
							printf("%s...........................%7s",vetor1,vetor2);
							
							i++;
						
						}
						
						printf("\n");
					
						fechar=0;
						
					
						system ("pause");
						system ("cls");
						
					break;
					
					case 6:
						
						fechar=1;
						system ("pause");
						
					break;
			
			}
						
					
						
							
				
		}
		
		
		else {
			
			printf("SÓ SÃO VÁLIDOS OS COMANDOS ""1"", ""2"" , ""3"" E ""4""\n");
			
			
			system ("pause");
			system ("cls");
		}
		
		fseek(arquivo, 0, 0);
		fseek(arquivo2, 0, 0);
		fseek(arquivo3, 0, 0);
		
		//menu=0;
		
		//fscanf (arquivo2, "%d", &n);
		//fscanf (arquivo, "%d", &n);
		
		i=0;
		j=0;
		k=0;
		
	}
	
	
	
}

Estou com um problema com o "fgets", o meu código funciona bem com o "fscanf", mas nenhuma das funções funcionam como o esperado quando uso "fgets", ja tentei ler o tamanho da string e deixar o "\0" antes do "\n", ja tentei usar fflush(stdin), ja tentei algumas gambiarras e o fgets continua bugando o meu código. (Na primeira leitura do arquivo é determinada a quantidade de linhas a serem lidas).

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em que parte dá erro?

Não tem como postar os TXT para gente testar?

E por que você pega o valor de n e logo após sobreescreve?

Citação

fscanf (arquivo2, "%d", &n);

fscanf (arquivo, "%d", &n);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×