前提・実現したいこと
ここに質問の内容を詳しく書いてください。
ログイン画面に現在のユーザー数が表示されるという機能をつくっているのですが、ユーザーを追加する関数でユーザー数を増やした時にそのログイン画面に表示されるユーザー数が増えた状態にするにはどうすればいいですか?
scanf関数にスペースを入力した時スペースがそのまま表示されるようにするにはどうすればいいですか?
例 ログイン画面 現在のユーザー数;3
新しくユーザー数が増加
ログイン画面 現在のユーザー数;4
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
C
ソースコード
int main(void)
{
Login();
return 0;
}
void Login(void)
{
int people;
char inputId[10];//ユーザーIDを入力するための変数 char inputPass[10];//パスワードを入力するための変数 printf("現在登録されているユーザーは%d名です\n\n", people); do { rewind(stdin); printf("ログイン画面\nユーザーIDとパスワードを入力してください。(終了はquit)\nユーザーID:"); scanf("%s", inputId);//ユーザーIDを入力 if (!strcmp(inputId, "quit"))//見やすくするために!(否定)を入れている { // inputIdの中身とquitが一致するかどうか判断する break;//文字列"quit"が入力されたら処理終了 } printf("パスワード:"); rewind(stdin); scanf("%s", inputPass);//パスワードを入力 /*入力したIDとパスワードが設定したIDとパスワードと一致しているかどうかの確認*/ for (int kurikaesi = 0; kurikaesi < 5; kurikaesi++) { if (!strcmp(inputId, userID[kurikaesi]) && !strcmp(inputPass, userPass[kurikaesi])) { MenuDisplay(people); } } printf("ユーザーIDおよびパスワードが異なっています。\n"); } while (1);//条件式に1を入れているのは無限ループにするため
}
void MenuDisplay(int player)
{
int inputNo;//使用したい機能の番号を入れるための変数
do { printf("\n\n機能選択画面\n1:大文字小文字逆転機能\n2:BMI測定機能\n3:ユーザー登録機能\n0:ログイン画面に戻ります\n"); printf("使用したい機能の番号(1~3)を入力してください:"); rewind(stdin); scanf("%d", &inputNo);//機能を選択するための数字を入力するためのもの switch (inputNo)//選んだ機能に分岐するためのもの { case 0: printf("\n\nログイン画面に戻りました\n\n\n"); Login(); break; case 1: LargSmallReverse(); break; case 2: BMICheck(); break; case 3: UserAdd(player); break; } printf("番号入力ミスです。"); } while (1);
}
int UserAdd(int human)
{
char repeat = 0;//ユーザー登録を続けるかどうかを判別するための文字を入れるための変数
PlayerCatalog(human); if (human <= 4)//ユーザーIDとパスワードを新しく追加できる { printf("\n新規追加のユーザーIDとパスワードを入力してください。\n"); do { printf("ユーザーID:"); scanf("%s", userID[human]);//新しいユーザーIDを入力するためのもの while (1) { if (isalpha(userID[human][0]))//新規追加のユーザーIDの最初の文字がアルファベットかどうか { break; } else { printf("ユーザーIDの最初の文字はアルファベットでお願いします\n"); printf("ユーザーID:"); scanf("%s", userID[human]);//新しいユーザーIDを入力するためのもの } } for (int repeat = 0; repeat < human; repeat++) { if (!(strcmp(userID[human], userID[repeat])))//新しく追加するIDが登録されているIDと被っていないかの確認 { printf("既にそのユーザーIDは登録されています\n新規追加のユーザーIDとパスワードを入力してください\n"); printf("ユーザーID:"); scanf("%s", userID[human]);//新しいユーザーIDを入力するためのもの repeat = -1;//また繰り返せるように初期化してある。-1で初期化しているのは+された時に0から始めれるように } } printf("パスワード:"); scanf("%s", userPass[human]);//新しいパスワードを入力するためのもの human = PlayerNumber(human);//ユーザー数の追加 PlayerCatalog(human); printf("\n"); if (human == 4)//残り1枠のユーザー登録をするかどうかの確認 { printf("更にユーザー登録をしますか?(y/n):"); rewind(stdin); scanf("%c", &repeat); while (repeat != 'n' && repeat != 'y') { printf("入力する文字は y or n です\n更にユーザー登録をしますか?(y/n):"); rewind(stdin); scanf("%c", &repeat); } if (repeat == 'n') { printf("ユーザー追加機能を終了します\n機能選択画面に戻りました"); return human; } } } while (human <= 4); } if (human == 5) { printf("ユーザー追加限界数まで登録しました\nこれ以上の追加は不可能ですので、メニューに戻ります\n機能選択画面にもどりました\n"); return human; }
}
試したこと
ネットでいろいろ調べてみたのですがわかりませんでした。
補足情報(FW/ツールのバージョンなど)
PlayerCatalog関数はユーザーIDとパスワードを表形式で表示する機能です。
回答1件
あなたの回答
tips
プレビュー