2017-07-16 11 views
-2

簡単にアクセスプログラムセグメンテーションエラー、Cファイル処理プログラム最初にすべてのLinuxを使用して

。私は最初にユーザーにサインアップするプログラムを作ろうとしています。彼はアカウントを持っていない場合にログインして、アカウントの詳細を入力してログインするログイン画面に進みます。ウェブサイトへのアクセスを容易にするなどのオプションが与えられるユーザーが1を入力した場合のように、彼はf.bに、2はquoraの方向に向けられます。私は正常にログインフェーズにプログラムをコード化することに成功しましたが、私はそれを1つの関数、すなわちmain()で行ったので、もし私が特定のタスクを実行するために別々の関数を持っていればいいと思いました。今回は別々の関数でコーディングしましたが、fopen()を使用してFILEを開こうとすると、今回はセグメンテーションエラーが発生しています。また、コンソールコマンドを使用してブラウザでウェブサイトを開く方法を教えてください。私たちは窓のように(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) { 

} 

FILEを開いているsign_up関数の最初の行にエラーが表示されます。

enter image description here

+1

この 'scanf("%c ");はあなたの考えではありません。どこでscanfに読み込みcharを保存させますか? –

+0

@SeekAddoまあ、それはダミーのscanf()です。私はgethc()関数として使用しています。 – Muneeb

+0

@SeekAdooそして、私がその場所を指定していないので、読まれたcharをどこにも格納しません(私が間違っていない場合)。 – Muneeb

答えて

0

scanf("%c")読み取り文字が格納されるポインタを期待しています。 scanf()は、ポインタを指定したかどうかは分かりません。予想されるスタック位置から宛先アドレスを読み込むだけです。効果的にscanf()はランダムなアドレスをとり、そこに文字を書き込みます。

getchar();またはchar Dummy; scanf("%c",&Dummy);を使用してください。

+1

'%* c'も事です。 – melpomene

+0

@melpomeneもう一つ質問したいことがあります。私がenterを押すので、fgetsは入力をスキップし続けます。それを解決する方法はありますか? – Muneeb

+0

@Muneebユーザ入力に 'scanf'を使わないでください。 'fgets'だけを使用してください。 – melpomene

関連する問題