void loginForm() {
char username[100], password[100];
printf("Username: ");
scanf("%[^\n]", username);
printf("%s", username);
printf("Password: ");
scanf("%[^\n]", password);
printf("%s", password);
}
自分のユーザー名は、それだけでこのように、大混乱に行く:のscanf 2015
Username: Tenzo
Password: Tenzo╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠Tenzo
を私は以来、混乱していますコードでは、ユーザーにパスワードを入力する前に「ユーザー名」を最初に印刷したいのですが、わかるように、パスワードには何も入力していませんが、すでにわかるように、そのように見えます。 VS2010のコードをテストしたところ、すべて正常に動作しています。私は何が起こっているのか分からない。
注:このコードはC++ではなく、Cで書かれています。
パーセント記号の前にスペースを入れて試してください: '"%[^ \ n] "'また、 'scanf'の' username'と 'password'の前にアンパサンドを書く必要はありません。 – user3386109
おっと、申し訳ありませんが、私はアンパサンドに気づいていませんでした。私はそれを取り除いた。そしてうわー、それは動作します!あなたは答えとしてコメントを設定することができないので、何が起こっているかについての詳細情報を返信するには、回答モードを使用したいと思うかもしれません:) – TenzoNakami
'scanf'関数は空白(改行のような)の読み込みを停止します。入力バッファ内の改行は、指定したバッファにコピーされません。そのため、 ''%99s "'形式が '' scanf'呼び出しのために十分でなければなりません。実際、 ''%["' '書式を使うと、先行する空白をスキップしないので問題が発生します。したがって、2回目の 'scanf'呼び出しは前回の呼び出しから改行を読み込みます。 –