Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Psycop

[Resolvido] Dificuldade ao Definir Nome de Ficheiro .txt

Mensagens Recomendadas

Psycop

Boas

Estou a tentar criar um ficheiro .txt de acordo com o nome para esse ficheiro definido pelo utilizador, mas estou a ter algumas dificuldades em o conseguir.

O código que criei para o que pretendo é o seguinte:

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

typedef struct _UC
{
      char nome_uc[25];
      int semestre;
      int ano;
      int ects;
      float nota;
}Uc;

int main()
{
      Uc *vector_uc;

      FILE *entrada;
      int i = 0;
      int num_linhas = 0;

     char nome_aluno[100];
     char nome_ficheiro_aluno[105];
     char txt[5] = ".txt";

     //Alocação dinamica de memória para o vector Registo:
     vector_uc = (Uc *)malloc(10*sizeof(Uc));

     if (vector_uc == NULL) 
     {
          perror("Erro na Allocaçao de Memoria: \n");
          exit(1);
     }
    else
    {
         printf("Memoria alocada com Sucesso:\n\n");
         printf("Insira o Nome do Aluno: ");
         scanf("%s", nome_aluno);

         nome_ficheiro_aluno = strcat(nome_aluno, txt);

         //Declaração e abertura do Ficheiro
         entrada = fopen(nome_ficheiro_aluno, "w+");

         if(entrada == NULL)
         {
              perror("Erro na Abertura do Ficheiro: \n");
              exit(0);
         }
        else
       {
              printf("Ficheiro Lido com Sucesso:\n\n");
              fprintf(entrada, "%s", nome_aluno);
      }

       i++;
}

    free(vector_uc);
}

Alguém me pode dar umas dicas?

Cumps

Editado por Psycop

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

Compila?

ve como e' que funciona o strcat

o strcat retorna um apontador, a menos que uses o strcpy, para copiares para o array, isso nao funciona.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Psycop

Pois, fui ver melhor e resolvi desta forma!

Cumps

printf("Insira o Nome do Aluno: ");
scanf("%[^\n]", nome_aluno);
strcpy (nome_ficheiro_aluno, nome_aluno);
strcat(nome_ficheiro_aluno, ".txt");

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

tens que ter cuidado que o strcpy e' inseguro, pode causar um stack-overflow. desde que nao se meta muitos caracteres, nao ha' problema


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Psycop

Bem, tentado desbravar mais um pouco e passando a abertura do ficheiro para uma função estou novamente com problemas!

O código é o seguinte:

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

void criar_aluno(FILE *entrada)
{
printf("\t\t\t\t***Criar Aluno***\t\t\t\n\n");

char nome_aluno[100];
char nome_ficheiro_aluno[105];

printf("Insira o Nome do Aluno:");
scanf("%[\n]", nome_aluno);

printf("\n\n");

strcpy (nome_ficheiro_aluno, nome_aluno);
strcat(nome_ficheiro_aluno, ".txt");

//Declaração e abertura do Ficheiro
entrada = fopen(nome_ficheiro_aluno, "w+");

if(entrada == NULL)
{
	perror("Erro na Abertura do Ficheiro: \n");
	exit(0);
}
else
{

}
}

int main()
{
int escolha = 1;
FILE *entrada;

//Menu Principal de Escolha das Opções
while (escolha != 5)
{
	printf("\t\t\t\t***Projecto LAB I***\n\n\n");

	printf("1 - Criar Novo Aluno: ");
	printf("\n2 - Editar Informação do Aluno: ");
	printf("\n3 - Apagar Aluno: ");
	printf("\n4 - Consultar Informação do Aluno: ");
	printf("\n5 - Sair: ");
	printf("\n\nOpçao: ");
	fflush(stdin);
	scanf("%d", &escolha);

	switch(escolha)
	{
		case 1:
		{
			criar_aluno(entrada);

			break;
		}

		case 2:
		{
			break;
		}

		case 3:
		{

			break;
		}

		case 4:
		{
			break;
		}

		case 5:
		{
			break;
		}

		default:
		{
			break;
		}
	}
}
}

Estou a receber um erro de "Argumento Inválido".

Cumps

Editado por Psycop

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

//scanf("%[\n]", nome_aluno);
scanf("%[^\n]", nome_aluno);

//fflush(stdin);
scanf("%d", &escolha);
fflush(stdin);//limpar o \n --- nunca me lembro se isto e' correcto, penso que nao...

ve se fica a funcionar.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Psycop

Bem, agora já não dá erro de argumento inválido, mas ao criar o ficheiro este fica com um nome composto por caracteres esquisitos, o que não é o que pretendo!

Cumps

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

qual e' o codigo que tens, com essas 2 alterasoes funciona direito aqui.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Psycop

Este:



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

void criar_aluno(FILE *entrada)
{
   printf("\t\t\t\t***Criar Aluno***\t\t\t\n\n");

   char nome_aluno[100];
   char nome_ficheiro_aluno[105];

   printf("Insira o Nome do Aluno:");
   fflush(stdin);
   scanf("%[\n]", nome_aluno);

   printf("\n\n");

   strcpy (nome_ficheiro_aluno, nome_aluno);
   strcat(nome_ficheiro_aluno, ".txt");

   //Declaração e abertura do Ficheiro
   entrada = fopen(nome_ficheiro_aluno, "w+");

   if(entrada == NULL)
   {
       perror("Erro na Abertura do Ficheiro: \n");
       exit(0);
   }
   else
   {

   }
}

int main()
{
   int escolha = 1;
   FILE *entrada;

   //Menu Principal de Escolha das Opções
   while (escolha != 5)
   {
       printf("\t\t\t\t***Projecto LAB I***\n\n\n");

       printf("1 - Criar Novo Aluno: ");
       printf("\n2 - Editar Informação do Aluno: ");
       printf("\n3 - Apagar Aluno: ");
       printf("\n4 - Consultar Informação do Aluno: ");
       printf("\n5 - Sair: ");
       printf("\n\nOpçao: ");
       scanf("%d", &escolha);
       fflush(stdin);

       switch(escolha)
       {
           case 1:
           {
               criar_aluno(entrada);

               break;
           }

           case 2:
           {
               break;
           }

           case 3:
           {

               break;
           }

           case 4:
           {
               break;
           }

           case 5:
           {
               break;
           }

           default:
           {
               break;
           }
       }
   }
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

scanf("%[\n]", nome_aluno);

Pois, fui ver melhor e resolvi desta forma!

Cumps

printf("Insira o Nome do Aluno: ");
scanf("%[^\n]", nome_aluno);
strcpy (nome_ficheiro_aluno, nome_aluno);
strcat(nome_ficheiro_aluno, ".txt");


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.