Na atividade eu preciso chamar em específico para listar todos os livros, revistas e caixas e não consigo fazer essa função. Quando chamo lista todas as obras aparecem junto 😐
Se alguém puder me dar uma ajudinha, eu ficarei super agradecida!!!
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
#define MAX 100
typedef struct{
int caixa, tipo;
int ano, edicao;
int quant;
char titulo[100];
char autor[100];
char editora[100];
char isbn[100];
}obras;
obras p1[200];
int ler_arquivo()
{
int i = 0;
char leitura[200];
arq = fopen(url, "r");
if(arq == NULL){
printf("ERRO na leitura do arquivo!");
}else{
while(fgets(leitura, 3000, arq) != NULL && (i<3000)){
banco = malloc(sizeof(char) * 3000); //variavel = malloc(tamanho da string que queremos em cada posição); strcpy(banco, leitura); i=i+1; } fclose(arq); } return i; }
preencher_obras(){ //alimentar os vetores de struct! ler_arquivo(); int j; printf("\nInforme o tipo da obra: [1] - livro [2] - revista: "); scanf("%d", &p1[j].tipo); fflush(stdin); printf("\nInforme o titulo: "); gets(p1[j].titulo); printf("\nInforme o autor: "); gets(p1[j].autor); printf("\nInforme a editora: "); gets(p1[j].editora); printf("\nInforme a edicao: "); scanf("%d", p1[j].edicao); fflush(stdin); printf("\nInforme o ISBN: "); gets(p1[j].isbn); printf("\nInforme o ano: "); scanf("%d", p1[j].ano); fflush(stdin); printf("\nInforme a quantidade de obras: "); scanf("%d", p1[j].quant); fflush(stdin); }
listar_obras(){ int k = ler_arquivo(); int i = 0; for(i = 0; i<k; i++){ printf("%s", banco); } system("pause"); } listarObrasPorCaixa(){ int numCaixa; int tipo; int i; char*opcaoObra; while(numCaixa == 1 || numCaixa == 2 || tipo == 1){ printf("%s", banco); } system("pause"); }
menu (){ obras obra[MAX]; int op; char resp; do{ system("cls"); printf("\n1 - Cadastrar obras"); printf("\n2 - Listar todas as revistas"); printf("\n3 - Listar todos os livros"); printf("\n4 - Listar obras por caixa"); printf("\n0 - Sair"); printf("\n\nEscolha uma opcao: "); fflush(stdin); scanf("%d", &op); if(op == 1){ preencher_obras(); }else if(op == 2){ listar_obras(); }else if(op == 3){ listar_obras(); }else if(op == 4){ listarObrasPorCaixa(); system("pause"); }else if((op != 1) && (op != 2) && (op != 3) && (op != 4) && (op != 0)){ printf("Opcao invalida"); system("pause"); }else if(op == 0){ printf("\n\nSaindo do sistema!!\n\n"); system("pause"); } }while(op!=0); } int main(){ menu(); setlocale(LC_ALL, "Portuguese"); }
Pergunta
ayllaass
Boa noite!!!
Na atividade eu preciso chamar em específico para listar todos os livros, revistas e caixas e não consigo fazer essa função. Quando chamo lista todas as obras aparecem junto 😐
Se alguém puder me dar uma ajudinha, eu ficarei super agradecida!!!
#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
#define MAX 100
FILE * arq;
char url[50] = "arquivo.txt";
char * banco[200];
typedef struct{
int caixa, tipo;
int ano, edicao;
int quant;
char titulo[100];
char autor[100];
char editora[100];
char isbn[100];
}obras;
obras p1[200];
int ler_arquivo()
{
int i = 0;
char leitura[200];
arq = fopen(url, "r");
if(arq == NULL){
printf("ERRO na leitura do arquivo!");
}else{
while(fgets(leitura, 3000, arq) != NULL && (i<3000)){
banco = malloc(sizeof(char) * 3000);
//variavel = malloc(tamanho da string que queremos em cada posição);
strcpy(banco, leitura);
i=i+1;
}
fclose(arq);
}
return i;
}
preencher_obras(){ //alimentar os vetores de struct!
ler_arquivo();
int j;
printf("\nInforme o tipo da obra: [1] - livro [2] - revista: ");
scanf("%d", &p1[j].tipo);
fflush(stdin);
printf("\nInforme o titulo: ");
gets(p1[j].titulo);
printf("\nInforme o autor: ");
gets(p1[j].autor);
printf("\nInforme a editora: ");
gets(p1[j].editora);
printf("\nInforme a edicao: ");
scanf("%d", p1[j].edicao);
fflush(stdin);
printf("\nInforme o ISBN: ");
gets(p1[j].isbn);
printf("\nInforme o ano: ");
scanf("%d", p1[j].ano);
fflush(stdin);
printf("\nInforme a quantidade de obras: ");
scanf("%d", p1[j].quant);
fflush(stdin);
}
listar_obras(){
int k = ler_arquivo();
int i = 0;
for(i = 0; i<k; i++){
printf("%s", banco);
}
system("pause");
}
listarObrasPorCaixa(){
int numCaixa;
int tipo;
int i;
char*opcaoObra;
while(numCaixa == 1 || numCaixa == 2 || tipo == 1){
printf("%s", banco);
}
system("pause");
}
menu (){
obras obra[MAX];
int op;
char resp;
do{
system("cls");
printf("\n1 - Cadastrar obras");
printf("\n2 - Listar todas as revistas");
printf("\n3 - Listar todos os livros");
printf("\n4 - Listar obras por caixa");
printf("\n0 - Sair");
printf("\n\nEscolha uma opcao: ");
fflush(stdin);
scanf("%d", &op);
if(op == 1){
preencher_obras();
}else if(op == 2){
listar_obras();
}else if(op == 3){
listar_obras();
}else if(op == 4){
listarObrasPorCaixa();
system("pause");
}else if((op != 1) && (op != 2) && (op != 3) && (op != 4) && (op != 0)){
printf("Opcao invalida");
system("pause");
}else if(op == 0){
printf("\n\nSaindo do sistema!!\n\n");
system("pause");
}
}while(op!=0);
}
int main(){
menu();
setlocale(LC_ALL, "Portuguese");
}
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.