Uma empresa armazena seu cadastro de produtos no arquivo produtos.txt, que contém os seguintes dados: código do produto (int), código do fornecedor (int) e preço de venda (float). Esta empresa armazena no arquivo fornecedores.txt os seguintes dados dos fornecedores: código do fornecedor (int), código do produto fornecido (int) e preço do produto fornecido (float). Observar que um fornecedor pode fornecer mais de um produto. Escrever um programa que lê do usuário um número de produto e mostra:
Produto: xxx Fornecedor: xxx Compra: xxxx.xx Venda: xxxx.xx
ou, caso o produto não exista no arquivo produtos.txt:
O produto xxx nao existe!
Produto: xxx Fornecedor: xxx Compra: xxxx.xx Venda: xxxx.xx
O produto xxx nao existe!
Passo 1
O enunciado pede um programa em C que, dado um código de produto digitado pelo usuário, procure esse produto no arquivo produtos.txt (que contém: código do produto, código do fornecedor e preço de venda), e, se existir, recupere também o preço de compra no arquivo fornecedores.txt (que contém: código do fornecedor, código do produto e preço de compra). O conteúdo da matéria é manipulação de arquivos em C, leitura de registros com fscanf e estruturas de controle para busca.
Passo 2
Lemos do usuário um inteiro com scanf, que será o código do produto que queremos buscar. Armazenamos esse valor em uma variável (por exemplo,
).
Passo 3
Abrimos o arquivo produtos.txt em modo leitura (fopen com “r”). Se fopen retornar NULL, encerramos com mensagem de erro. Caso contrário, lemos linha a linha com
Em cada iteração comparamos
O produto
e retornamos.
Passo 4
Se o produto existe, abrimos fornecedores.txt em modo leitura da mesma forma. Lemos cada linha com
e comparamos
Passo 5
Por fim, usamos printf para exibir exatamente:
Produto: %d Fornecedor: %d Compra: %.2f Venda: %.2f
Onde imprimimos , o fornecedor, o preço de compra com duas casas decimais e o preço de venda com duas casas decimais.
O programa trata de erros de abertura de arquivo, verifica existência do produto e formata corretamente a saída conforme enunciado.
Produto: %d Fornecedor: %d Compra: %.2f Venda: %.2f
Onde imprimimos
O programa trata de erros de abertura de arquivo, verifica existência do produto e formata corretamente a saída conforme enunciado.
Resposta
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
int main() {
int input_produto;
int codigo_produto, cod_fornecedor;
float preco_venda, preco_compra;
FILE *fprod, *fforn;
int encontrado = 0;
int input_produto;
int codigo_produto, cod_fornecedor;
float preco_venda, preco_compra;
FILE *fprod, *fforn;
int encontrado = 0;
printf("Digite o codigo do produto: ");
scanf("%d", &input_produto);
fprod = fopen("produtos.txt", "r");
if (fprod == NULL) {
printf("Erro ao abrir arquivo produtos.txt\n");
return 1;
}
while (fscanf(fprod, "%d %d %f", &codigo_produto, &cod_fornecedor, &preco_venda) == 3) {
if (codigo_produto == input_produto) {
encontrado = 1;
break;
}
}
fclose(fprod);
if (!encontrado) {
printf("O produto %d nao existe!\n", input_produto);
return 0;
}
fforn = fopen("fornecedores.txt", "r");
if (fforn == NULL) {
printf("Erro ao abrir arquivo fornecedores.txt\n");
return 1;
}
int cod_fornec_f, cod_produto_f;
int achou = 0;
while (fscanf(fforn, "%d %d %f", &cod_fornec_f, &cod_produto_f, &preco_compra) == 3) {
if (cod_fornec_f == cod_fornecedor && cod_produto_f == input_produto) {
achou = 1;
break;
}
}
fclose(fforn);
if (!achou) {
printf("Fornecedor %d nao fornece o produto %d\n", cod_fornecedor, input_produto);
return 0;
}
printf("Produto: %d Fornecedor: %d Compra: %.2f Venda: %.2f\n",
input_produto, cod_fornecedor, preco_compra, preco_venda);
return 0;
}