2017-12-19 4 views
-3

이 책을 삽입하려면 함수를 쓰고 있습니다. 함수는 입니다. inslivros();. 다음은 코드입니다.C 파일 만들기가 작동하지 않습니다.

int inslivros() 
{ 
    char livro[30]; 
    int categoria; 
    printf("Qual é o nome do livro que vai inserir?\n-> "); 
    gets(livro); 
    printf("Qual é a categoria do livro?\n1- Romance\n2- História\n-> "); 
    scanf("%d", &categoria); 
    if(categoria == 1) 
    { 
     FILE *livros; 

     livros = fopen("C:\Livros\inserelivros.txt", "w+"); 
     fputs(livro, livros); 
     fclose(livros); 

     FILE *romance; 

     romance = fopen("C:\Livros\romance.txt", "w+"); 
     fputs(livro, romance); 
     fclose(romance); 

     system("cls"); 
     printf("Livro inserido com Sucesso!\n"); 
    } 
    else 
    { 
     int escolha; 
     system("cls"); 
     printf("Nome inválido!\n"); 
     printf("1- Adicionar livro\n0- Voltar para o menu\n-> "); 
     scanf(escolha); 
     switch(escolha) 
     { 
     case 1: 
      system("cls"); 
      inslivros(); 
     case 2: 
      system("cls"); 
      main(); 
     } 
    } 

} 

categoria == 1 일 경우 폴더와 파일이 생성되지 않습니다. 나는 어디로 잘못 갔는가?

+0

댓글이 확장 된 논의하지 않습니다; 이 대화는 [채팅으로 이동되었습니다] (http://chat.stackoverflow.com/rooms/161535/discussion-on-question-by-rodrigo-silva-c-file-creation-not-working). – Andy

+0

디렉토리 경로를 만들어야 할 필요가 있다면 [C++/Linux에서 어떻게 디렉토리를 만들 수 있습니까?] (https://stackoverflow.com/questions/675039/how-can-i-create-directory- tree-in-c-linux/675193 # 675193) 대답은 C와 C++ 코드입니다. 'mkdir()'시스템 호출을 사용하고 경로 구분자를 제외하고는 윈도우즈에서 OK로 작동해야한다. (슬래시를 윈도우에서 처리하지만 일반적으로 백 슬래시를 사용한다. –

답변

2

categoria == 1 인 경우 폴더과 파일이 생성되지 않습니다. 나는 어디로 잘못 갔는가?

fopen은 파일/폴더 만 생성합니다. 따라서 프로그램을 실행할 때 C:\Livros이 없으면 프로그램이 실패합니다.

mkdir

+0

고마워요! 나쁘다, 미안해. –

0

다음과 같은 제안 된 코드에서 폴더/디렉토리 모양 만들려면 :

  1. 이 질문에 대한 의견의 대부분을 구현을
  2. 재귀
  3. 이 계속 추가 할 수있는 결정을 분리 방지 새 항목을 실제로 추가 한 항목.
  4. 깨끗하게
  5. 각 헤더 파일
  6. 주의를 포함하는 이유 문서 컴파일 : 대부분의 항목이 제대로 확인 된 오차됩니다; 그러나, fputs()에 대한 호출은 에러가 나는 누락 된 디렉토리를 만들 mkdir를 사용하는 당신에게 그것을 떠날거야

을 확인해야합니다.

mkdir에 대한 호출이 성공했는지 또는 프로그램을 처음 실행할 때 성공하지 않았는지 확인하십시오. 다음 프로그램을 실행하면 mkdir이 실패합니다. 지금

그리고 제안 된 코드 :

#include <stdio.h> // perror(), printf(), fprintf(), 
        // fgets(), fputs(), 
        // fopen(), fclose() 
#include <stdlib.h> // system(), exit(), EXIT_FAILURE 
#include <string.h> // strlen(), strchr() 

#define MAX_NOME_LEN 30 

// prototypes 
void inslivros(void); 

int main(void) 
{ 
    int escolha = 1; 

    system("cls"); 


    while(escolha) 
    { 
     printf("1- Adicionar livro\n" 
       "0- Voltar para o menu\n-> "); 
     if(1 != scanf("%d", &escolha)) 
     { 
      fprintf(stderr, "scanf for escolha failed\n"); 
      exit(EXIT_FAILURE); 
     } 

     // implied else, scanf successful 

     switch(escolha) 
     { 
      case 1: 
       inslivros(); 
       break; 

      case 0: 
       puts("exiting"); 
       break; 

      default: // user entered an invalid menu selection 
       puts("invalid menu selection, try again"); 
       break; 
     } // end switch() 
    } // end while() 
} // end function: main 


void inslivros() 
{ 
    char livro[ MAX_NOME_LEN ]; 
    int categoria; 

    printf("Qual é o nome do livro que vai inserir?\n-> "); 
    //gets(livro); 
    if(! fgets(livro, sizeof livro, stdin)) 
    { 
     perror("fgets for line to insert failed"); 
     exit(EXIT_FAILURE); 
    } 

    // implied else, fgets successful 

    // remove trailing newline 
    char * newline; 
    if((newline = strchr(livro, '\n'))) 
    { 
     *newline = '\0'; 
    } 

    printf("Qual é a categoria do livro?\n" 
      "1- Romance\n" 
      "2- História\n-> "); 

    if(1 != scanf("%d", &categoria)) 
    { 
     fprintf(stderr, "scanf to input the 'categoria' failed\n"); 
     exit(EXIT_FAILURE); 
    } 

    //implied else, scanf successful 

    FILE *livros = NULL; 

    switch(categoria) 
    { 
     case 1: 
      if(! (livros = fopen("C:\\Livros\\inserelivros.txt", "a"))) 
      { 
       perror("fopen for inserelivros.txt failed"); 
       exit(EXIT_FAILURE); 
      } 

      // implied else, fopen successful 

      fputs(livro, livros); 
      fclose(livros); 

      FILE *romance; 

      if(!(romance = fopen("C:\\Livros\\romance.txt", "a"))) 
      { 
       perror("fopen for romance.txt failed"); 
       exit(EXIT_FAILURE); 
      } 


      // implied else, fopen successful 

      fputs(livro, romance); 
      fclose(romance); 

      system("cls"); 
      printf("Livro inserido com Sucesso!\n"); 
      break; 

     case 0: 
      printf("Historia not yet implemented\n"); 
      break; 

     default: 
      system("cls"); 
      //printf("Nome inválido!\n"); 
      printf("invalid menu selection\n"); 
      break; 
    } // end switch() 
} // end function: inslivros 
관련 문제