2016-10-26 5 views
0

이 프로그램에서는 fgets() 또는 gets()를 사용하여 문자열 c [] (add_diary())에 입력 할 수 없으며 프로그램은 입력을 건너 뜁니다 프로세스, 내가 뭘 잘못하고 있는지 말해줘. 나는 그것을 시작할 수 없다. 일기에서 가장 중요한 것은 글을 쓰는 것이고, '쓰지 마라. fgets()가 작동하지 않는다'는 것입니다. 나의 이해에서문자열에 입력 할 수 없습니다

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

void access(); 
void diary_main(char user[],char pass[]); 
void diary_login(); 
void add_diary(unsigned dd, unsigned mm, unsigned yy); 
void add_entry(unsigned choice); 
void del_entry(unsigned dd, unsigned mm, unsigned yy); 
void update_entry(unsigned dd, unsigned mm, unsigned yy); 
void logout(); 

void main() { 
    access(); 
} 

void access() { 
    char password[10],username[20], ch; 
    int i; 
    printf("Enter User name: "); 
    gets(username); 
    printf("Enter the password (8 characters):"); 
    for(i=0;i<8;i++) { 
      ch = getch(); 
      password[i] = ch; 
      ch = '*' ; 
      printf("%c", ch); 
    } 
    password[i] = '\0'; 
    /*printf("\nYour password is :"); 
    for(i=0;i<8;i++) { 
    printf("%c", password[i]);*/ 
    diary_main(username, password); 
} 

void diary_main(char user[],char pass[]) { 
    /*FILE *fptr; 
    //char file_name[10]; 
    //sprintf(file_name, "user%s.txt", user); 
    fptr = fopen("login.txt", "w"); 
    fprintf(fptr,"\n%s",user); 
    fclose(fptr);*/ 
    diary_login(); 
} 

void diary_login() { 
    unsigned choice; 
    printf("\nEnter your choice\n"); 
    printf("1. Add Diary Entry\n"); 
    printf("2. Delete Diary Entry\n"); 
    printf("3. Update Diary Entry\n"); 
    printf("4. Logout\n"); 
    printf("5. Exit\n"); 
    scanf("%d", &choice); 
    if (choice == 1) { 
     add_entry(choice); 
    } 
    else if (choice == 2) { 
     add_entry(choice); 
    } 
    else if (choice == 3) { 
     add_entry(choice); 
    } 
    else if (choice == 4) { 
     logout(); 
    } 
    else if (choice == 5) { 
     exit(1); 
    } 
    else { 
     //printf("%d", choice); 
     printf("Enter correct choice"); 
     diary_login(); 
    } 
} 

void add_entry(unsigned choice) { 
    unsigned dd, mm, yy; 
    printf("Enter date (DD/MM/YY):"); 
    scanf("%u/%u/%u", &dd, &mm, &yy); 
    //printf("%u/%u/%u", dd, mm, yy); 
    if ((dd>31 || mm>12) || (dd>29 && mm == 2) || (yy!=17)) { 
     printf("\nEnter correct date\n"); 
     add_entry(choice); 
    } 
    else { 
     //printf("else"); 
     switch(choice) { 
      case 1: add_diary(dd, mm, yy); 
        break; 
      case 2: del_entry(dd, mm, yy); 
        break; 
      case 3: update_entry(dd, mm, yy); 
        break; 
     } 
    } 
} 

void add_diary(unsigned dd, unsigned mm, unsigned yy) { 
    //printf("add_diary"); 
    long file_extra; 
    char file_name[50], c[5000]; 
    FILE *fptr; 
    file_extra = (((dd*100)+mm)*100)+yy; 
    sprintf(file_name, "diary%ld.txt", file_extra); 
    fptr = fopen(file_name, "w"); 
    /*if(fptr == NULL){ 
     printf("Error"); 
     exit(1); 
    }*/ 
    printf("\nStart writing diary..\n"); 
    scanf("%s", c); 
    //fgets(c, sizeof(c), stdin); 
    //gets(c); 
    fprintf(fptr,"%s",c); 
    fclose(fptr); 
} 

void del_entry(unsigned dd, unsigned mm, unsigned yy) { 
    long file_extra; 
    char file_name[50]; 
    file_extra = (((dd*100)+mm)*100)+yy; 
    sprintf(file_name, "diary%ld.txt", file_extra); 
    int status; 
    status = remove(file_name); 
    if(status == 0) { 
     printf("Entry deleted successfully.\n"); 
    } 
    else { 
     printf("Unable to delete the file\n"); 
    } 
} 
void update_entry(unsigned dd, unsigned mm, unsigned yy) { 
    long file_extra; 
    char file_name[50], c[5000]; 
    file_extra = (((dd*100)+mm)*100)+yy; 
    sprintf(file_name, "diary%ld.txt", file_extra); 
    FILE *fptr; 
    fptr = fopen(file_name, "w"); 
    printf("\nStart editing diary..\n"); 
    scanf("%s", c); 
    //fgets(c, sizeof(c), stdin); 
    //gets(c); 
    fprintf(fptr,"%s",c); 
    fclose(fptr); 
} 
void logout(){ 

} 
+0

새로운 라인이 무엇을 의미하며 그 새로운 라인은 어디에서 오는가? –

+0

및 add_diary()에서 scanf() 만 작동합니다. –

답변

0

이 scanf와 작동 방법은 다음과 같습니다

하는의 당신이 그들에게 실제로에서에 "Hello World \ n을을"입니다 가져 어떤 입력에 "Hello World"를 가지고 있다고 가정 해 봅시다. 배열 ('\ n')에서 n-1을 선택하고 종료 ('\ o')로 바꿔서이 문제를 해결할 수 있습니다.