Ir ao conteúdo
  • Cadastre-se

Gabbie1

Membro Pleno
  • Posts

    46
  • Cadastrado em

  • Última visita

posts postados por Gabbie1

  1. Alguém pode me ajudar com esse código? Ele não retorna nada. 

    Leia 10 números inteiros e armazene em um vetor. Em seguida escreva os elementos que são primos e suas respectivas posições no vetor 
     
    */ 
    
    #include <stdio.h>
    #include <locale.h>
    #define tam 3
    
    
    int main (void){ 
    setlocale (LC_ALL, ""); 
    int vet[tam], i, cont=0; 
    
    		for (i=0;i<tam;i++){
    			printf ("Entre com um número:"); 
    			scanf ("%d", &vet[i]); 
    		}
    		
    				for (i=2; i<tam; i++){ 
    					if (vet[i]%i== 0)   
    					cont++;  
    							if (cont == 0)
    							printf ("[%d]: %d é primo!",i, vet[i]);
    			 
     
    }
     
    
    return 0; 
    }

     

  2. 
    #include <stdio.h>
    #include <locale.h>
    
    int main (void){
    	int num, soma, cont=0, quant=0, media=0, maior=0, menor, mediapar=0, opcao=0, numpar=0, somapar=0; 
    	setlocale(LC_ALL, ""); 
    	do{
    		printf("\nEscolha uma opção: "); 
    		printf("\n1- Inserir números: "); 
    		printf("\n2- A Soma dos números digitados"); 
    		printf("\n3- A quantidade de números digitados"); 
    		printf("\n4- A média dos números digitados"); 
    		printf("\n5- O maior número digitado"); 
    		printf("\n6- O menor número digitado"); 
    		printf("\n7- A média dos números pares"); 
    		printf("\n8- Finalizar");
    		printf("\nEscolha uma opção: ");  
    		scanf ("%d", &opcao); 
    
    	
    		switch (opcao)
    		{
    		case 1:
    	 	printf("\nEntre com um número: "); 
    		scanf ("%d", &num);
    		cont++;
    		soma = soma + num; 
    		
    		 
    		
    			if (num<menor) 
    		menor = num;
     		else if (num<menor) 
    		menor = num;
    	 
    		if(num  % 2 == 0)
    		{
    		mediapar++;
    		numpar = num;
    		somapar = somapar + num;
    		}
    	
    		break; 	 
    		case 2:
    		printf ("Total: %d", soma);    
    		break;
    		case 3:
    		printf ("%d", cont);    
    		break;
    		case 4:
    		media = soma/cont;
    		printf ("%d", media);    
    		break;
    		case 5:
    		printf ("%d", maior);    
    		break;
    		case 6:
    		printf ("%d", menor);    
    		case 7:		
    		mediapar = somapar / mediapar;
    		printf ("%d", somapar);  
    		break;
    	}
    	}
    while (opcao != 8);
    
    
    return 0; 
    	}
    
    

    Ambos os testes retornam valores aleatórios o média par também não funciona. 

    • Amei 1
  3. Alguém pode me ajudar com os erros de lógica desse código?

    
    
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main (){
    	int m[3][6];
    	int i, j;
    	int op =999, soma=0;
    	int cont=0, media=0;
    
    		while (op != 6){
    			printf ("\n1 - Carregar a matriz");
    			printf ("\n2 - Imprimir a soma de todos os elementos das colunas ímpares");
    			printf ("\n3 - Imprimir a média aritmética dos elementos da segunda e quarta coluna");
    			printf ("\n4 - Substituir os valores da sexta coluna pela soma dos valores das colunas 1 e 2");
    			printf ("\n5 - Imprimir a matriz modificada");
    			printf ("\n6 - Sair");
    			printf ("\nQual a sua opcao?");
    			scanf ("%d", &op);
    			
    			switch (op){
    				case 1: for (i=0;i<3;i++){
    											for (j=0;j<6;j++){
    							printf ("\nInsira o elemento [%d][%d]: ", i, j);
    							scanf ("%d", &m[i][j]);
    							
    		}
    	}
    	break;
    				case 2: for (i=0;i<3;i++){
    											for (j=0;j<6;j=j+2){
    							soma = soma + m[i][j];
    							break;
    		
    			}
    			
    			
    		}
    		printf ("\nTotal da soma = %d", soma);
    		
    				case 3: for (i=0;i<3;i++){
    											for (j=2;j<4;j=j+2){
    							soma = soma + m[i][j];
    							cont++;
    }
    }
    
    	media = soma/cont;
    	printf ("\nMedia = %d", media);
    	break;
    			case 4: for (i=0;i<3;i++){
    											for (j=0;j<1;j=j++){
    							soma = soma + m[i][j];
    							soma = m[i][6];
    							soma = 0;
    	
    }
    
    }
    break;
    		case 5: for (i=0;i<3;i++){
    					for (j=0;j<6;j++){
    						printf ("[%d][%d]: %d", i, j, m[i][j]);
    		
    			
    					}
    		printf ("\n");
    		}
    		break;
    	}
    }
    getchar ();
    getchar ();
    return 0;
    }

     

    • Obrigado 1
  4. Como posso contar os espaços em branco? Eles contam como caracteres? 

    Também gostaria de saber como posso contar os caracteres de forma mais eficiente sem ter que contar o +1 ali

    Agradeço desde já

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int main(void){
    int i, tams, num_vogal = 0, letras = 0;
    char *frase, *pont, *aux;
    int tam;
    printf("Entre com o tamanho maximo da frase: ");
    scanf("%d", &tams);
    /*Aloca uma string com o tamanho tams */
    frase = (char*)malloc(tams*sizeof(char));
    if(frase == NULL){
    printf("Nao conseguiu alocar o espaco informado");
    exit(0);
    }
    /*faz a leitura da string frase*/
    printf("Entre com a frase:\n");
    getchar(); /*elimina o \n */
    gets(frase);
    pont = frase;
    while(*pont){
    if(*pont == 'a' || *pont == 'e' || *pont == 'i'
    ||*pont == 'o' || *pont == 'u')
    num_vogal++;
    pont++;
    }
    
    aux = frase;
    while(*aux){
    if(*pont == ' ')
    letras++;
    aux++;
    }
    tam = strlen(frase);
    
    printf("\nTotal de letras da Frase: %d",tam+1);
    printf ("\nTotal de espacos na Frase: %d", letras);
    
    printf("\nA frase tem %d vogais.\n", num_vogal);
    getchar();
    return 0;
    }

     

  5. Alguem pode me ajudar identificar erro nesse código aqui?

    
    #include <stdio.h>
    #include <stdlib.h>
    #define tf 3
    
    typedef struct dados {
    int RG;
    char nome [20], rua;
    int numcasa, idade;
    }ficha;
    
    
    int main(){
    ficha vfichas[10];
    int i;
    int velho=0, novo=999, media=0;
    
    for (i=0;i<tf;i++){
    printf("\nEntre com o RG: ");
    scanf("%d",&vfichas[i].RG);
    
    printf("\nEntre com o nome: ");
    scanf("%s", &vfichas[i].nome);
    
    printf("\nEntre com o nome da rua: ");
    scanf("%s", &vfichas[i].rua);
    getchar(); 
    
    printf("\nEntre com o numero da casa: ");
    scanf("%d",&vfichas[i].numcasa);
    
    printf("\nEntre com a Idade: ");
    scanf("%d",&vfichas[i].idade);
    
    printf ("\n\n");
    }
    
    for (i=0;i<tf;i++){
    printf("%d\n", vfichas[i].RG);
    printf("%s\n", vfichas[i].nome);
    printf("%s\n",vfichas[i].rua);
    printf("%d\n",vfichas[i].numcasa);
    printf("%d\n",vfichas[i].idade);
    printf ("\n\n");
    }
    
    for (i=0;i<tf;i++){
    		if (vfichas[i].idade <= novo)
    		novo = vfichas[i].idade;	
    	
    		if (vfichas[i].idade >= velho)
    		velho = vfichas[i].idade;
    
    		media = media + vfichas[i].idade;
    
    }
    /*
    for (i=0;i<tf;i++){
    	if (vfichas[i].idade >= velho)
    	velho = vfichas[i].idade;
    }
    
    for (i=0;i<tf;i++){
    	media = media + vfichas[i].idade;
    }
    */
    media = media/tf;
    printf ("\nMais velho: %d\nMais novo: %d\nMedia: %d", velho, novo, media);
    
    getchar();
    }

     

  6. Eu preciso fazer um vetor de 10 valores que verifica e imprime os números primos, entretanto meu código apenas imprime o último valor. 

     

    #include<stdio.h>
    #include <locale.h>
    #define tf 10
    
    int main() {
     setlocale(LC_ALL, "Portuguese");
     int num[tf], i, d, cont = 0;
     
     for (i=0;i<tf;i++){
     printf("Digite um número: ");
     scanf("%d", &num[i]);
    }
    
    for (i=0;i<tf;i++){
    	cont = 0;
     for (d = 2; d <= num[i] / 2; d++) {
        if (num[i] % d == 0) {
           cont++;
           break;
          	 
        } 
    	if (cont == 0)
        	printf("\n[%d]: %d PRIMO!",i, num[i]); 
    
    }
    }
    
     return 0;
    }

     

    • Obrigado 1
  7. Será que alguem pode me dar uma luz sobre o porque meu código só tá lendo o nome na primeira vez

    #include <stdio.h>
    #include <string.h>
    #include <locale.h>
    #define tf 10
    
    struct pessoa {
    	char nome [20];
    	int idade;
    };
    
    int main (){
    	setlocale (LC_ALL, "portuguese");
    	struct pessoa p[tf];
    	int i;
    	int menor = 999, maior = 0;
    	
    	for (i=0;i<tf;i++){
    		
    		printf ("\nEntre com o nome: ");
    		fgets (p[i].nome, 20, stdin);
    		fflush (stdin);
    		
    		printf ("\nEntre com a idade: ");
    		scanf ("%d", &p[i].idade);
    	}
    	
    	for (i=0;i<tf;i++){
    		 if(p[i].idade > maior) 
    		 maior = i;
             
    		 if(p[i].idade < menor) 
    	   	 menor = i;
    		
    	}
    	printf ("\nMais velho!\nNome: %c\nIdade: %d", p[maior].nome, p[maior].idade);
    	printf ("\nMais novo!\nNome: %c\nIdade: %d", p[menor].nome, p[menor].nome);
    	
    }
    

     

  8. @isrnick

    6 minutos atrás, isrnick disse:

    Não dá, o tamanho do vetor é fixo, o tamanho indica quanta memória foi alocada para o vetor, e continua alocado até não precisar mais, e nesse caso desaloca o vetor inteiro.

     

    Nesse caso o fato de ter o valor duplicado e irrelevante, você poderia ignorar o tamanho real do vetor e considerar apenas parte dele como sendo a parte que contém informação relevante. Outra opção seria colocar um valor inválido para a sua situação na posição final, por exemplo em um caso que somente valores maior que zero são guardados no vetor poderia usar 0 ou um número negativo para indicar que a posição não é considerada parte do vetor.

     

    Mas para fazer o que você está pensando seria necessário lidar com alocação dinâmica (malloc() ou calloc() no C), nesse caso você mesmo programaria a alocação de memória, e então poderia usar realloc() para realocar a memória com tamanho diferente, nesse caso um tamanho menor.

     

     Eita. Não sei nada de ponteiros nem alocação dinâmica.

    Sou bem iniciante mesmo. Acho difícil de entender como funciona realmente o insere e o remove. 

    Sempre uso variáveis pra declarar o tamanho dos meus vetores, mas fui refazer as outras provas e fiquei preocupada porque ela geralmente exige um tamanho fixo pro vetor nas questões, tava procurando uma gambiarra mesmo. 

    Não consegui fazer funcionar a resolução da professora 😧 

    adicionado 1 minuto depois

    daí tô tentando descobrir um jeito diferente de resolver isso

    adicionado 2 minutos depois
    2 minutos atrás, Gabbie1 disse:

    Outra opção seria colocar um valor inválido para a sua situação na posição final, por exemplo em um caso que somente valores maior que zero são guardados no vetor poderia usar 0 ou um número negativo para indicar que a posição não é considerada parte do vetor.

    Gostei disso! Vou testar

    adicionado 4 minutos depois

    @Flávio Pedroza É uma ótima ideia também. Vou testar. Obrigada!!!

  9. Como eu posso "cortar" o vetor quando eu removo uma posição e tô trabalhando direto com o tamanho dele e não uma variável?

    Por exemplo: 

    
    void remover (int v[10], int pos){
    	int i; 
    	for (i=pos+1;i<10;i++){
    		v[i-1] = v[i]; 
    		
    	}
    }

    Se o tamanho do meu vetor fosse uma variável, bastava eu colocar tl--; que resolveria meu problema. Mas nesse tipo de situação como posso fazer pra não ficar com a última posição dobrada?

  10. 9 minutos atrás, isrnick disse:

     

    scanf é a função mais versátil para ler dados do terminal no C.

     

    No caso %s é um especificador para ler caracteres até encontrar o primeiro caractere vazio (seja ele espaço, tabulação, nova linha, ou etc), então realmente só vai conseguir ler o primeiro nome usando esse especificador pois para de ler quando encontra o espaço.

     

    Mas para ler tudo que é digitado até o Enter ser apertado basta usar outro especificador de string que leia tudo até encontrar o primeiro caractere nova linha '\n'.

     

    Para isso usamos o especificador %[ que é outro especificador de strings no qual você diz que caracteres deve, ou que não deve, guardar, por exemplo %[abc] só guardaria strings contendo esses 3 caracteres, como "aabbaacc", mas se colocar o caractere ^ logo após o [, como %[^123] estará indicando que os caracteres que não podem ser capturados, nesse caso qualquer coisa que não tenha 1, 2 ou 3 será capturado.

     

    Então desejamos usar um especificador que leia tudo até entrar o caractere nova linha '\n' colocado ao apertar Enter no terminal cmd.exe, o que é o mesmo que dizer que vamos capturar tudo menos o caractere nova linha '\n', então usando o especificador %[ isso ficaria assim %[^\n], que vai ler tudo até achar um '\n' e para de ler aí sem capturar o '\n'.

     

    Logo, nosso scanf ficaria assim:

    
    scanf (" %19[^\n]", vn[i]);

     

    Muito mais prático! E eu batendo cabeça pra ler strings

    • Curtir 1
  11. 4 horas atrás, isrnick disse:

    tf do número de colunas da matriz não pode ser igual a 3 nesse caso (a menos que cada nome só tivesse 2 letras...)

     

    E tem algumas coisas a corrigir no scanf: Não vai & antes do nome no caso de vetores e matrizes; Seria bom colocar um espaço antes do %s na string de especificadores para limpar espaços em branco antes de começar a obter a string; E quando é feita leitura de dados na forma de string é importante indicar o número máximo de caracteres que pode ser lidos, ou seja a capacidade máxima de caracteres que podem ser guardados no vetor de caracteres, pois além disso estouraria o tamanho do vetor.

     

    No caso de um vetor de 20 posições poderia guardar no máximo 19 caracteres (a última posição guardaria o caractere nulo '\0' nesse caso extremo).

     

    Então ficaria assim:

    
    scanf (" %19s", vn[i]);

     

    Eita, eu não sabia nada disso. Obrigada moço! To feliz demais porque aprendi muita coisa

    adicionado 1 minuto depois

    Eu tava tendo problema quando tinha que ler nomes com espaço usando scanf, por isso que comecei usar fgets. Achei que o scanf que era ruim pra ler strings. Obrigada moço!

    • Curtir 1
  12. 1 hora atrás, isrnick disse:

    Para guardar um vetor de nomes tem que usar uma matriz de caracteres. Assim cada linha da matriz pode armazenar uma string contendo um nome.

    
    char clientes[20][20];
    
    //O nome do primeiro cliente fica na primeira posição do "vetor":
    clientes[0]

     

     

     

     

    scanf é sim o mais indicado para ler strings.

    Ficaria mais ou menos assim?? Esse foi o mais próximo que eu consegui. Mas ainda assim no printf ele imprime tudo embolado, mistura uma palavra com a outra. Tô achando esse treco muito complicado

    void leituranomes (char vn[tf][tf]){
    	int i;
    	for (i=0;i<tf;i++){
    		printf ("\nEntre com o nome: ");
    		scanf ("%s", &vn[i]);
    		
    	}
    }
    
    
    void exibenomes (char vn[tf][tf]){
    	int i; 
    	for (i=0;i<tf;i++){
    		printf ("\nNome: %s", vn[i]);
    	}
    }

     

  13. Como eu posso fazer pra criar um vetor de nomes? O exercício a seguir pede um vetor de nomes, uma matriz de consumo e um vetor de preços. Eu preciso criar um vetor char ou int e alocar as strings dentro de um int? Eu sei que scanf não é o mais indicado pra ler strings, fiz apenas pra testar. Mas ele sempre dá erro na hora de exibir

    #include <stdio.h>
    #define tf 3
    
    void leituramatriz (int m[tf][tf]){
    	int i, j;
    	for (i=0;i<tf;i++)
    		for (j=0;j<tf;j++){
    			printf ("\nEntre com os elementos da matriz: ");
    			scanf ("%d", &m[i][j]);
    		}
    }
    
    void exibematriz (int m[tf][tf]){
    	int i, j;
    	for (i=0;i<tf;i++){
    		printf ("\n");
    		for (j=0;j<tf;j++){
    			printf ("%d  ", m[i][j]);			
    		}
    	}
    }
    
    void leituraprecos (double v[tf]){
    	int i;
    	for (i=0;i<tf;i++){
    		printf ("\nEntre com o preco: ");
    		scanf ("%lf", &v[i]);
    	}
    }
    
    void exibeprecos (double v[tf]){
    	int i; 
    	for (i=0;i<tf;i++){
    		printf ("[%d]: %d", i, v[i]);
    	}
    }
    
    void leituranomes (char vn[tf]){
    	int i;
    	for (i=0;i<tf;i++){
    		printf ("\nEntre com o nome: ");
    		scanf ("%s", &vn[i]);
    		
    	}
    }
    
    
    void exibenomes (char vn[tf]){
    	int i; 
    	for (i=0;i<tf;i++){
    		printf ("\nNome: %s", vn[i]);
    	}
    }
    
    double fechaconta (int m[tf][tf], double vp[tf], char vn[tf], int numesa){
    	int i;
    	double total;
    	for (i=0;i<tf;i++){
    		total = total + m[numesa][i]*vp[i];
    	}
    	printf ("\nMesa: %d\nNome: %s\nTotal a pagar: R$%5.2lf", numesa, vn[numesa], total);
    return total;
    }
    
    void vaoembora (int m[tf][tf], double vp[tf], char vn[tf]){
    	int i, j;
    	int total; 
    	for (i=0;i<tf;i++){
    		for (j=0;j<tf;j++){
    			total = total + m[i][j]*vp[i];
    		}
    		printf ("\nMesa: %d\nNome: %s\nTotal a pagar: R$%5.2lf", i, vn[i], total);
    		total =0;
    	}
    }
    
    void faturamento (int m[tf][tf], double vp[tf]){
    	int i, j; 
    	double total;
    	for (i=0;i<tf;i++){
    		for (j=0;j<tf;j++){
    			total = total + m[i][j]*vp[i];
    		}
    	}
    	printf ("\nFaturamento total: R$%5.2lf", total);
    }
    
    
    
    
    int main (){
    	int m[tf][tf];
    	char vn[tf];
    	double vp[tf];
    	int opcao=0, numesa;
    	double totaldocliente=0;
    	while (opcao != 10){
    		printf ("\n\n################# MENU #####################");
    		printf ("\n1 - Carrega matriz de consumo");
    		printf ("\n2 - Exibe a matriz de consumo");
    		printf ("\n3 - Carrega vetor de precos");
    		printf ("\n4 - Exibe vetor de precos");
    		printf ("\n5 - Carrega vetor de nomes");
    		printf ("\n6 - Exibe vetor de nomes");
    		printf ("\n7 - Fechar a conta de um cliente");
    		printf ("\n8 - Calcular a conta de cada cliente");
    		printf ("\n9 - Faturamento final");
    		printf ("\n10 - Sair");
    		printf ("\nQual a sua opcao?");
    		scanf ("%d", &opcao);
    		
    		switch (opcao){
    			case 1: leituramatriz (m);
    					break;
    			case 2: exibematriz (m);
    					break;
    			case 3: leituraprecos (vp);
    					break;
    			case 4: exibeprecos (vp);
    					break;
    			case 5: leituranomes (vn);
    					break;
    			case 6: exibenomes (vn);
    					break;
    			case 7: printf ("\nQual o nro da mesa que deseja fechar?");
    					scanf ("%d", &numesa);
    					totaldocliente = fechaconta (m, vp, vn, numesa);
    					break;
    			case 8: vaoembora (m, vp, vn);
    					break;
    			case 9: faturamento (m, vp);
    					break;
    					
    		}
    		
    	}
    }

     

     

    Screenshot_1.png

    Screenshot_2.png

    • Curtir 1
  14. Como eu posso fazer pro vetor não apenas inserir o valor na posição determinada mas também remaneje as posições? O máximo que eu consegui foi até aqui, mas ele só substitui o valor. 

    Por exemplo um vetor de 5 posições: 

    10 20 30 40 50

    Insere o número 15 na posição 1 ficaria assim

    10 15 20 30 40

     

    
    /* Faça um programa para ler um vetor de TL elementos. O programa
    deverá inserir um novo elemento em uma determinada posição do vetor. Os elementos
    devem ser remanejados para a inserção do novo elemento. Veja explicação abaixo*/
    
    #include <stdio.h>
    #define tf 50
    
    void levetor (int vt[], int tam){
    	int i;
    	for (i =0; i<tam; i++){
    		printf ("\n[%d] = ", i); 
    		scanf ("%d", &vt[i]);
    	}
    }
    
    void insere (int vt[], int tam, int pos, int nro){
    	
    
    	int i; 
    	for(i = tam; i > pos; i--){
    		vt[i] = vt[i-1];		
    	}	
    	vt[pos] = nro;
    	for(i=0; i<tam+1; i++){
    		printf("\n[%d] = %d", i, vt[i]);
    	}
    }
    
    int main (){ 
       int vetor[tf]; 
       int tl, pos;
       int nro;
       
       printf ("Entre com o tamanho do vetor: "); 
       scanf ("%d", &tl); 
       
       printf ("\nLeitura do Vetor");
       levetor (vetor, tl); 
       
       printf ("Entre com o numero que deseja inserir: "); 
       scanf ("%d", &nro); 
       
       printf ("Entre com a posicao em que deseja inserir o novo valor: "); 
       scanf ("%d", &pos); 
       
       printf ("Apos a inserção"); 
       insere (vetor, tl, pos, nro); 
       
    
    
    return 0; 
    }

     

    adicionado 6 minutos depois

    No caso precisam dar um passinho pra frente e abrir espaço pro novo valor. Quase oposto ao que o remove faz, mas eu não consigo entender, é abstrato demais. Só sei remove por decoreba mesmo. Preciso de outro for pra remanejar os valores? Tem alguma forma mais simples e curta de fazer o insere? SOCORRO. 

  15. 14 minutos atrás, KXSY disse:

    Quando você trabalhar com arquivos vai dar problema.

     

    ele esvasia o buffer de um arquivo associado (nesse caso e o stdin= standar input= entrada padrão), mandando toda a informação para o arquivo.

    há outros arquivos padrões como

    stdout=saída padrão (geralmente e o video)

    stderr=video

    stdin=teclado

    você pode notar que o seu teclado não é um arquivo, você não pode abri-lo (No windows até que pode).

    Entendi. Deve dar um problemão mesmo 😧

    Vou logo tratar de parar de usar, já que tô perto de ter que estudar ponteiros etc

    adicionado 2 minutos depois
    4 minutos atrás, isrnick disse:

    E verá que nesse caso o fflush não limpa a stdin como esperado, resultando que o fgets pega o "\n" como entrada e guarda em prod[ i ].nome .

    Por isso eu sempre tinha que declarar minhas strings com 1 caracter a mais senão dava problema. Achei que isso fosse com strings no geral.

    • Haha 2
  16. 13 minutos atrás, isrnick disse:

     

    Faltou o & para passar o endereço da variável, ao invés do valor guardado nela, para a função scanf.

     

     

     

    E no lugar de fflush(stdin) use algo como:

    
    void limpastdin(){
        int ch;
        while((ch = getchar()) != '\n' && ch != EOF);
    }

    Ou assim:

    
    for(int ch = getchar(); ch != '\n' && ch != EOF; ch = getchar());

     

    Obrigada!!

    Qual o problema com o fflush? Muita gente me diz pra não usar mas eu não entendo o porque. Sou iniciante, até agora ele não me deu problema. 

    O que ele faz exatamente?

  17. Sempre que esse código entra no 2 loop pra fazer a leitura do vetor ele para de funcionar mas aparentemente não encontro erro algum. Onde posso ter errado? 

    #include <stdio.h>
    #include <string.h>
    #define tf 5 
    
    struct produto {
    	int cod;
    	char nome[15];
    	double preco;
    	int qtdade;
    };
    
    
    void leitura (struct produto prod[tf]){
    	int i;
    	for (i=0;i<tf;i++){
    		printf ("\nEntre com o codigo do produto: "); 
    		scanf ("%d", &prod[i].cod); 
    		
    		printf ("\nEntre com o nome do produto: "); 
    		fflush (stdin);
    		fgets (prod[i].nome,15,stdin);
    		
    		printf ("\nEntre com o preco do produto: "); 
    		scanf ("%lf", &prod[i].preco);
    		
    		printf ("\nEntre com a quantidade disponivel do produto: "); 
    		scanf ("%d", prod[i].qtdade);
    		
    		printf ("\n\n________________________________\n\n"); 
    	}
    }
    
    void exibe (struct produto prod [tf]){
    	int i;
    	for (i=0;i<tf;i++){
    		printf ("\nCodigo do produto: %d", prod[i].cod);
    		printf ("\nNome do produto: %s", prod[i].nome);
    		printf ("\nPreco: %.2lf", prod[i].preco);
    		printf ("\nQuantidade: %d", prod[i].qtdade);
    		printf ("\n\n______________________________________\n\n");
    	}
    }
    
    void compra (struct produto prod [tf]){
    	int i; 
    	int pos = -1;
    	int codigo, pedido; 
    	
    	do {
    		printf ("\nQual o codigo do produto que deseja? "); 
    		scanf ("%d", &codigo);
    		printf ("\nQual a quantidade de produtos que deseja? "); 
    		scanf ("%d", &pedido); 
    		
    		for (i=0;i<tf;i++){
    			if (prod[i].cod == codigo)
    			pos = i;
    		}
    		
    		if (pos == -1)
    		printf ("\nNao achou!"); 
    		
    		else {
    			if (prod[pos].qtdade < pedido)
    			printf ("\nQuantidade indisponivel!");
    			
    			else {
    				prod[pos].qtdade = prod[pos].qtdade - pedido; 
    				printf ("\nCompra efetuada com sucesso! Novo estoque do produto %s eh de %d", prod[pos].nome, prod[pos].qtdade);
    			}
    		}
    		
    	}
    	while (codigo != 0);
    }
    
    
    int main (){
    	struct produto prod[tf];
    	int opcao =0;
    	
    	while (opcao != 4){
    		printf ("\n\n################# MENU ###############");
    		printf ("\n1 - Cadastra produtos");
    		printf ("\n2 - Exibe produtos");
    		printf ("\n3 - Fazer uma compra");
    		printf ("\n4 - Sair");
    		printf ("\nQual a sua opcao? "); 
    		scanf ("%d", &opcao); 
    		
    		switch (opcao){
    			case 1: leitura (prod);
    					break; 
    			case 2: exibe (prod);
    					break;
    			case 3: compra (prod);
    					break;
    			default: 
    					printf ("\nOpcao invalida!");
    		}
    	}
    }

     

  18. Esse código tá dando erro e eu não consigo identificar o quê exatamente tem de errado. E no exercício c, tem como colocar um vetor dentro de uma matriz? Como?

    Penso que posso criar um for para o vetor dentro dos 2 for de leitura da matriz, por exemplo: 

    /*APENAS COMO EXEMPLO, A MATRIZ QUE O EXERCICIO PEDE É UMA 12x3, esse é apenas pra mostrar minha lógica*/
    void leituramatrizp (struct pessoa m_pessoa[20][2], struct data vet_data[20]){
    	int i, j, x;
    	for (i=0;i<20;i++){
    		for (j=0; j<2; j++){
    			printf ("\nEntre com o nome: ");
    			fflush (stdin); 
    			fgets (m_pessoa[i].nome, 10, stdin);
    			
    			for (x=0; x<20; x++){
    			printf ("\nEntre com o dia: ");
    			scanf ("%d", &vet_data[x].dia);
    			
    			printf ("\nEntre com o mes: ");
    			scanf ("%d", &vet_data[x].mes);
    			
    			printf ("\nEntre com o ano: ");
    			scanf ("%d", &vet_data[x].ano);
    		}
    			
    			printf ("\n\n__________________________________\n");			
    		}
    	}
    }

    Criar 3 estruturas de dados para atender o seguinte:

    a) A primeira estrutura deve conter o nome de uma pessoa com a respectiva data de nascimento (ver struct´s data e pessoa abaixo e também a Matriz 20x2)

     

    b) A segunda estrutura contêm o nome do signo com as datas (dia e mês) de inicio e fim e descrição das características correspondentes ao signo (ver matriz do Horoscopo Ocidental abaixo).

     

    c) A terceira estrutura que contem o nome do signo no horóscopo chinês, um vetor contendo 6 anos e a descrição das características correspondente ao signo (Apesar do horóscopo chinês considerar também dia e mês de nascimento, para este exemplo, somente nos preocuparemos com o ano).

    OBS: para esse exercício será necessário criar struct e também, vetores contendo struct

    #include <stdio.h>
    #include <string.h>
    
    struct data {
    	int dia; 
    	int mes; 
    	int ano;
    };
    
    struct pessoa {
    	char nome [10];
    	struct data nascimento; 
    };
    
    void leituramatrizp (struct pessoa m_pessoa2[20][2]){
    	int i, j;
    	for (i=0;i<20;i++){
    		for (j=0; j<2; j++){
    			printf ("\nEntre com o nome: ");
    			fflush (stdin); 
    			fgets (m_pessoa2[i].nome, 10, stdin);
    			
    			printf ("\nEntre com o dia: ");
    			scanf ("%d", &m_pessoa2[i].dia);
    			
    			printf ("\nEntre com o mes: ");
    			scanf ("%d", &m_pessoa2[i].mes);
    			
    			printf ("\nEntre com o ano: ");
    			scanf ("%d", &m_pessoa2[i].ano);
    		
    			printf ("\n\n__________________________________\n");			
    		}
    	}
    }
    
    void exibematrizp (struct m_pessoa3[20][2]){
    	int i; 
    	int j; 
    	
    	for (i=0; i<20;i++){
    		for (j=0; j<2; j++){
    			printf ("\nNome: %s", m_pessoa3[i].nome);		
    			printf ("\nDia: %d", m_pessoa3[i].dia);
    			printf ("\nMes: %d", m_pessoa3[i].mes);
    			printf ("\nAno: %d", m_pessoa3[i].ano);
    			
    	}
    }
    }
    int main (){
    	struct pessoa m_pessoa[20][2];
    	struct data vet_data [20];
    	int op = 0; 
    	
    	while (op != 3 ){
    		
    		printf ("\n\n############### MENU ######################\n");
    		printf ("\n1 - Carregar a matriz de pessoas");
    		printf ("\n2 - Exibir a matriz de pessoas");
    		printf ("\n3 - Sair");
    		printf ("\nQual a sua opcao? "); 
    		scanf ("%d", &op);
    		
    		switch (op){
    			case 1: leituramatrizp (m_pessoa, vet_data);
    					break; 
    			
    			case 2: exibematrizp (m_pessoa, vet_data);
    					break; 
    					
    		}
    	}
    }

     

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!