分段错误,C文件处理程序

时间:2017-07-16 17:23:16

标签: c file-handling

轻松访问计划

首先使用linux。我正在尝试制作一个程序,首先注册用户,以防他没有帐户,之后他将被导向登录屏幕,在那里他将输入他的帐户详细信息,然后将登录。之后他将提供选项,以提供轻松访问网站等就像用户输入1一样,他将被定向到f.b,2被定向到quora,依此类推。我成功地设法将程序编码到登录阶段,但我在单个函数中进行了编写,即main(),所以我认为如果我有执行特定任务的单独函数会很好。我这次在单独的函数中对它进行了编码,但是当我尝试使用fopen()打开FILE时,我得到了分段错误。还请告诉我一些使用console命令在浏览器中打开网站的方法。就像我们在windows中一样(例如,启动www.facebook.com)。这是代码。

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

struct user_data {
    char name[50];
    unsigned long password;
};

struct user_data new_user;                  // Will hold the data of new
struct user_data data_ver;                  // Will hold the data read

void sign_up(void);
void sign_in(void);

int main(void) {
    beginning:                                      // Beginning label in case of invalid input
    printf("\t\t\t\t WELCOME TO EASY ACCESS APPLICATION");
    printf("\n\n\nIf you have an account press 1.\n\nPress 2 for sign up.");
    char user_choice;                               // Wil hold the
    // user_choice i.e whether he wants to sign up / sign in
    user_choice = getchar();
    if (user_choice == '1') {
        sign_in();                                 // In case of 1 goto sign in page
    }
    else if (user_choice == '2') {
        sign_up();             // Opening file);
        // In case of 2 goto sign up page
    }
    else {
        printf("Invalid input. Try again.\n\n");
        puts("Press any key to continue...");
        getchar();
        system("clear");
        goto beginning;
    }
    return 0;
}

void sign_up(void) {
    FILE *data = fopen("data.txt", "a");
    if (data == NULL) {
        printf("Unable to open file.");
        scanf("%c");
        system("clear");
    }
    system("clear");
    printf("\t\t----------------------------\n"
           "\t\t|                          |\n"
           "\t\t|     SIGN UP PAGE         |\n"
           "\t\t|                          |\n"
           "\t\t----------------------------");

    printf("\n\nName:");
    scanf("%c");                // Dummy scanf
    gets(new_user.name);            // Getting name into the struct
    printf("\nPassword.");
    scanf("%lu", &new_user.password);    // Getting pass into the struct
    fprintf(data, "%s %lu\n", new_user.name, new_user.password);       //Feeding data into FILE
    system("clear");
    printf("\n\nSign up complete. :)  ");
    printf("\n\nYou will now be directed to the sign in page. ");
    printf("\nPress any key to contine...");
    scanf("%c");
    system("clear");
    fclose(data);
}

void sign_in(void) {

}

我在sign_up函数的第一行收到错误,我正在打开文件。

enter image description here

1 个答案:

答案 0 :(得分:0)

scanf("%c")需要一个指针,用于存储读取字符。 scanf()不知道你是否提供了指针,它只是从预期的堆栈位置读取目标地址。有效地,scanf()接受一个随机地址并在那里写入字符。

使用getchar();char Dummy; scanf("%c",&Dummy);