2016-10-26 6 views
0

このプログラムでは、fgets()またはgets()を使用して、文字列c [](add_diary()内)に入力を取得できません。私が間違っていることを教えてください。私はそれを始めることができません。日記の中で最も重要なことは書くことです。事は「あなたは書くことができません、cuz 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

であり、scanf()のみがadd_diary()で動作しています。 –

答えて

0

私の理解から、これはscanf関数がどのように動作するかです:

は、あなたが彼らに何を実際に持っていることの "Hello World \ nを" である入力の "Hello World" を、持っているとしましょう。この問題を回避するには、配列( '\ n')のn-1を選択し、終端( '\ o')に置き換えます。

関連する問題