復習がてら難しい(自分にとっては)コードを書いてみようと、パスワードの管理ができるプログラムを作成しようと思ったのですがいかんせんうまくいきません。
ファイル処理の部分に問題があるのは試行錯誤の結果わかったのですが原因がわかったところで解決策がわかりません。
以下にコードを載せます。長いですが一応全部貼ります。
/*
このプログラムはマスターキーを最初に設定し、以降は再度プログラムを実行した際にマスターキーを保存したファイルからキーを読み込み
入力されたキーと一致した場合のみ、もうひとつのパスワードファイルを呼び出しパスの、確認、追加、初期化を選択することができる。(予定)
*/
#include<stdio.h>
#include<stdlib.h>
void kakikomi();
int main(void)
{
FILE *fp,*master;
char mky[100], pass[10], passinfo[100], masterkey[100], ifmasterkey[100];
int sth;
if (master = fopen("pass.txt", "r") == NULL) {
master = fopen("pass.txt", "w");
printf("マスターキー設定:");
scanf("%s", mky);
fprintf(master, "%s\n", mky);
exit(1);
}
fgets(masterkey, 100, master);
while(1)
{
printf("マスターキー入力:");
scanf("%s", ifmasterkey);
if (ifmasterkey != masterkey) {
printf("マスターキーが一致しません\n");
continue;
}
else
{
break;//キーが一致した場合ループ脱出
}
}
do {
printf("パスプログラムモード選択\n1:読み込み\n2:追加保存\n3:初期化\n");//モードの選択
scanf("%d", &sth);
switch (sth)
{
case 1:
break;
case 2:
kakikomi();
break;
case 3:
fp = fopen("pass.txt", "w");
fclose(fp);
break;
}
} while (sth >= 1 && sth <= 3);
fclose(master);
fclose(fp);
return 0;
}
void kakikomi()
{
char passinfo[100], pass[10];
int a;
FILE *fp2;
fp2 = fopen("pass.txt", "a+");
while (1) {
printf("パスの名前入力\n");
scanf("%100s", passinfo);
fprintf(fp2, "%s\n", passinfo);
printf("パス入力\n");
scanf("%10s", pass);
fprintf(fp2, "%s\n", pass);
while (1) {
printf("続行しますか?\n1:Yes 2:No\n");
scanf("%d", &a);
if (a == 1)break;
else if (a == 2)exit(1);
else continue;
}
continue;
}
fclose(fp2);
}
こちらのfgetsを使ったパターンだと(一部要約)
Line: 33
Expression: stream,valid()
というのがでました。
初心者なので見辛かったり、そもそもの欠点があったりするかもしれませんが、どうか解決策をヒントでもいいので教えていただけると嬉しいです.