C言語を使用し、サインアップ、サインイン、ができるプログラムを作成しています。
ある程度作成してみましたが、サインアップはできてもサインイン時にIDとパスワードが不一致という表示になってしまいます。
何かいい解決方法があれば教えてください。よろしくお願いします。
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #define LEN 16 struct account{ char ID[LEN]; char PASS[LEN]; }; struct account user[999]; void menu(); void sign_up(); void sign_in(); int main(){ while(1) { menu(); } } void menu() { int a = 0; while(1){ printf("%sさんが使用中。\n",user->ID); printf("1=サインアップ\n"); printf("2=サインイン\n"); scanf("%d%*c",&a); break; } switch(a){ case 1: sign_up(); break; case 2: sign_in(); break; } } void sign_up() { FILE *file; file = fopen("c:\abcde\info.txt", "a"); if(file == NULL){ printf("ファイルが開けません。\n"); } printf("\n"); printf("アカウントを新規登録します。\n"); printf("登録したいIDを入力してください。(%d文字以内)-->",LEN); fgets(user->ID, sizeof(user->ID), stdin); printf("登録したいパスワードを入力してください。(%d文字以内)-->",LEN); fgets(user->PASS, sizeof(user->PASS), stdin); fprintf(file,"%s", user->ID); fprintf(file,"%s", user->PASS); fclose(file); printf("登録完了。\n"); menu(); } void sign_in() { int i; char name[16]; char pswd[16]; FILE *file; file = fopen("c:\abcde\info.txt", "r"); if(file == NULL){ printf("ファイルが開けません\n"); } printf("\n"); printf("IDを入力してください。(%d文字以内)-->",LEN); scanf("%s",name); printf("パスワードを入力してください。(%d文字以内)-->",LEN); scanf("%s",pswd); for(i=0;i<999;i++){ if(strcmp(name,user[i].ID)==0 && strcmp(pswd,user[i].PASS)==0){ printf("\nWelcome!!\n"); }else{ printf("\nCannot sign in.\n"); } break; } fclose(file); (void)getchar(); menu(); }
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
失礼しました。コメントありがとうございます。編集しましたので、ご確認ください。
ザっと見、コンパイルも通らないと思うし、思ったような動きにならないと思うのですが、
ひとまず、ログイン(サインイン)、ログアウト(サインアウト)の処理をどう作ればいいのかを知りたいということ?
#できれば、用語も統一して欲しいです。
#質問文中とソース中の表現が合ってない。
他人に作ってもらったコードを丸コピペしていたら、理解は進まないかと。
まずは、簡単なことから一つ一つ作るのが、プログラミングです。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13232304783
肝心の部分でのオリジナルとの違いは、こっちのやつはメモリリークを起こしてしまっています。
アドバイスを受けて色々と肉付けしていってるけど、正直言って、C言語はおろか、プログラミングも始めて日が浅いでしょ?
一つの目標として、こうしたものを作るというのはいいけど、まずはamiyaさんが仰る通り、簡単なところから一つ一つやっていった方がいいと思うよ。入門書片手に。
今のままでは、回答する側も疲れてくるし、質問者さんも煮詰まると思うよ。