-1
Someone can help me, I need to open a read-only txt file informed by the user with argc and argv but the file does not open, is giving error in opening the file
here my . c
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include "locadora.h"
int main(int argc, char *argv[]){
int op, x, n;
char nomeArq[100], vet[5], *token, texto[256];
FILE *entrada;
setlocale(LC_ALL,"");
printf ("Digite o nome do arquivo de entrada: ");
scanf ("%s[^\n]", nomeArq);
if (entrada = fopen(argv[1], "r") == NULL){
printf ("Erro no Arquivo.\n");
}
else {
fgets (vet,(sizeof(vet)-1), entrada);
n = atoi(vet);
p = (struct Filmes*) malloc (sizeof(struct Filmes) * n);
for (x = 0; x < n; x++){
fgets (texto, (sizeof(texto)-1),entrada);
p[x].codigo = x + 1;
token = strtok(texto,";");
strcpy(p[x].titulo, token);
token = strtok(NULL,";");
p[x].ano = atoi(token);
token = strtok(NULL,";");
p[x].quantidade = atoi(token);
troca();
token = strtok(NULL, "\n");
p[x].genero = atoi(token);
}
fclose(entrada);
}
while(1) {
printf ("\nNúmeros de títulos cadastrados no acervo: %d\n", n);
printf ("\nDigite uma opção:\n");
printf ("\n1 - Locação de filme;\n");
printf ("2 - Entrega de filme;\n");
printf ("3 - Busca por título de um filme;\n");
printf ("4 - Impressão de um filme ou todos filmes;\n");
printf ("5 - Relatório;\n");
printf ("0 - Sair.\n");
scanf ("%d", &op);
switch (op){
case 1:
locacao();
break;
case 2:
entrega();
break;
case 3:
buscar();
break;
case 4:
impressao();
break;
case 5:
relatorio();
break;
case 0:
return 0;
}
}
}
here my video rental company. c
void locacao(){
int codigo, x, n;
printf ("Digite o código do filme a ser alugado: ");
scanf ("%d", &codigo);
for (x = 0; x < n; x++){
if (p[x].codigo == codigo){
if (p[x].quantidade > 0){
p[x].quantidade = p[x].quantidade - 1;
printf ("Título alugado: %s.\n", p[x].titulo);
}
}
else{
printf ("Título %s indisponível no acervo.\n", p[x].titulo);
}
}
}
void entrega(){
int codigo, x;
printf ("Digite o código do filme a ser entregue: ");
scanf ("%d", &codigo);
for (x = 0; x < n; x++){
if (p[x].codigo == codigo){
p[x].quantidade++;
printf ("Título devolvido: %s.\n", p[x].titulo);
}
else{
printf ("Título %s inexistente no acervo.\n", p[x].titulo);
}
}
}
void buscar(){
int op, x, codigo, ano;
char titulo[100], genero[50];
printf ("Você deseja buscar por qual opção:\n");
printf ("1 - Código do filme;\n");
printf ("2 - Título do filme;\n");
printf ("3 - Ano do filme;\n");
printf ("4 - Gênero do filmes;\n");
printf ("5 - Todos.\n");
scanf ("%d", &op);
switch (op){
case 1:
printf ("Digite o código a ser buscado: ");
scanf ("%d", &codigo);
for (x = 0; x < n; x++){
if (p[x].codigo == codigo){
printf("\nCódigo: %d\n", (p+x)->codigo);
printf ("Título: %s\n", (p+x)->titulo);
printf ("Ano: %d\n", (p+x)->ano);
printf ("Quantidade: %d\n", (p+x)->quantidade);
troca();
printf("Gênero: %s\n", (p+x)->genero);
}
}
break;
case 2:
printf ("Digite o título a ser buscado: ");
scanf("%s[^\n]", titulo);
for (x = 0; x < n; x++){
if(strcmp(p[x].titulo, titulo) == 0){
printf("\nCódigo: %d\n", (p+x)->codigo);
printf ("Título: %s\n", (p+x)->titulo);
printf ("Ano: %d\n", (p+x)->ano);
printf ("Quantidade: %d\n", (p+x)->quantidade);
troca();
printf("Gênero: %s\n", (p+x)->genero);
}
}
break;
case 3:
printf ("Digite o ano a ser buscado: ");
scanf ("%d", &ano);
for (x = 0; x < n; x++){
if(p[x].ano == ano){
printf("\nCódigo: %d\n", (p+x)->codigo);
printf ("Título: %s\n", (p+x)->titulo);
printf ("Ano: %d\n", (p+x)->ano);
printf ("Quantidade: %d\n", (p+x)->quantidade);
troca();
printf("Gênero: %s\n", (p+x)->genero);
}
}
break;
case 4:
printf ("Digite o genero a ser buscado: ");
scanf ("%s[^\n]", genero);
for (x = 0; x < n; x++){
if(p[x].genero == genero){
printf("\nCódigo: %d\n", (p+x)->codigo);
printf ("Título: %s\n", (p+x)->titulo);
printf ("Ano: %d\n", (p+x)->ano);
printf ("Quantidade: %d\n", (p+x)->quantidade);
troca();
printf("Gênero: %s\n", (p+x)->genero);
}
}
break;
case 5:
for (x = 0; x < n; x++){
printf("\nCódigo: %d\n", (p+x)->codigo);
printf ("Título: %s\n", (p+x)->titulo);
printf ("Ano: %d\n", (p+x)->ano);
printf ("Quantidade: %d\n", (p+x)->quantidade);
troca();
printf("Gênero: %s\n", (p+x)->genero);
}
break;
}
}
void impressao(){
int op, x;
char titulo[100];
printf ("Digite uma opção:\n");
printf ("1 - Imprimir um filme;\n");
printf ("2 - Imprimir todos filmes.\n");
scanf ("%d", &op);
switch (op){
case 1:
printf ("Digite o titulo do filme a ser impresso: ");
scanf ("%s[^\n]", titulo);
for (x = 0; x < n; x++){
if(strcmp(p[x].titulo, titulo) == 0){
printf("\nCódigo: %d\n", (p+x)->codigo);
printf ("Título: %s\n", (p+x)->titulo);
printf ("Ano: %d\n", (p+x)->ano);
printf ("Quantidade: %d\n", (p+x)->quantidade);
troca();
printf("Gênero: %s\n", (p+x)->genero);
}
}
break;
case 2:
for (x = 0; x < n; x++){
printf("\nCódigo: %d\n", p->codigo);
printf ("Título: %s\n", p->titulo);
printf ("Ano: %d\n", p->ano);
printf ("Quantidade: %d\n", p->quantidade);
troca();
printf("Gênero: %s\n", p->genero);
}
}
}
void relatorio(){
int op, x, ano;
char genero[50];
FILE *entrada;
printf ("Você deseja gerar um relatorio de qual opção: ");
printf ("\n1 - Ano;\n");
printf ("2 - Gênero;\n");
printf ("3 - Completo.\n");
scanf ("%d", &op);
switch (op){
case 1:
if ((entrada = fopen("ano.txt", "w")) == NULL){
printf ("Erro no Relatório.\n");
}
else{
printf ("Digite o ano a ser buscado: ");
scanf ("%d", &ano);
for (x = 0; x < n; x++){
if (p[x].ano == ano){
printf("\nCódigo: %d\n", (p+x)->codigo);
printf ("Título: %s\n", (p+x)->titulo);
printf ("Ano: %d\n", (p+x)->ano);
printf ("Quantidade: %d\n", (p+x)->quantidade);
troca();
printf("Gênero: %s\n", (p+x)->genero);
}
}
fclose(entrada);
}
break;
case 2:
if ((entrada = fopen("genero.txt", "w")) == NULL){
printf ("Erro no Arquivo.\n");
}
else{
printf ("Digite o genero a ser buscado: ");
scanf ("%s[^\n]", genero);
for (x = 0; x < n; x++){
troca();
if (p[x].genero == genero){
printf("\nCódigo: %d\n", (p+x)->codigo);
printf ("Título: %s\n", (p+x)->titulo);
printf ("Ano: %d\n", (p+x)->ano);
printf ("Quantidade: %d\n", (p+x)->quantidade);
troca();
printf("Gênero: %s\n", (p+x)->genero);
}
}
fclose(entrada);
}
break;
case 3:
if ((entrada = fopen("completo.txt", "w")) == NULL){
printf ("Erro no Arquivo.\n");
}
else{
for (x = 0; x < n; x++){
printf("\nCódigo: %d\n", (p+x)->codigo);
printf ("Título: %s\n", (p+x)->titulo);
printf ("Ano: %d\n", (p+x)->ano);
printf ("Quantidade: %d\n", (p+x)->quantidade);
troca();
printf("Gênero: %s\n", (p+x)->genero);
}
}
fclose(entrada);
break;
}
}
void troca(){
int x;
int genero = (int) p[x].genero;
switch(genero){
case 1:
printf("Drama\n");
break;
case 2:
printf("Romance\n");
break;
case 3:
printf("Desenho\n");
break;
}
}
here my . h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum genero{
drama = 1, romance = 2, desenho = 3
};
typedef struct Filmes{
int codigo;
char titulo[100];
int ano;
int quantidade;
enum genero genero;
}filme;
filme *p;
int n;
void locacao();
void entrega();
void busca();
void impressao();
void relatorio();
I apologize for getting too big :)