私は唯一の1を入力することができますが、その後、それだけで、プログラムを終了します。もちろん
あなたが"2"
を入力すると、コードがif (number==2)
@Scadge
を持っているとして、次の点を考慮してください
scanf("%s",&fullname);
はfullname
にスペースやその他のホワイトスペースは保存されません。 「John Doe」のような氏名を入力すると、"John"
はfullname
に、"Doe"
はpassword
に保存されます。
scanf()
を避けてください。
よりもむしろfgets()
でユーザ入力を読み取り、ユーザ入力を読み取るためにscanf()
を使用します。これは、さまざまな入力問題を処理できるヘルパー関数にとって素晴らしい機会です。
さて、
// printf("Do you want to log in(1) or register (2)? \n");
// scanf("%d",&number);
number = read_int("Do you want to log in(1) or register (2)? \n");
...
// printf("username : ");
// scanf("%s",&username);
read_line(username, sizeof username, "username : ");
// printf("Full name : ");
// scanf("%s",&fullName);
read_line(fullName, sizeof fullName, "fullName : ");
追加のコードは、ファイルの終わりのための非常に長い行をチェックするために追加することができたきれいなユーザ入力をint
レンジのテストをこれら2つのヘルパー関数を使用し
int read_int(const char *prompt) {
if (prompt) fputs(prompt, stdout);
fflush(stdout); // insure output is written before asking for input
char buffer[40];
if (fgets(buffer, sizeof buffer, stdin) == NULL) {
return NULL;
}
int i;
if (sscanf(buffer, "%d", &i) == 1) {
return i;
}
// TBD - what should code do if invalid data entered. Try again?
}
char *read_line(char *dest, sizeof size, const char *prompt) {
if (prompt) fputs(prompt, stdout);
fflush(stdout); // insure output is written before asking for input
char buffer[size * 2 + 1]; // form buffer at _least 1 larger for \n
if (fgets(buffer, sizeof buffer, stdin) == NULL) {
return NULL;
}
size_t len = strlen(buffer);
if (len > 0 && buffer[len-1] == '\n') buffer[--len] = '\0';
if (len >= size) {
// input too big - how do you want to handle this?
TBD_Code();
}
return strcpy(dest, buffer);
}
など
使用されたサンプル入力をポストします。 – chux
データを印刷/保存しないと、コード化されているかどうかをどのように知ることができますか? – chux
1を入力すると 'if'文は実行されません(' number'は1になり、 'number == 2'はfalseです)。当然のことながら、あなたのプログラムは、 'return'である 'if'ブロックの終わりにまっすぐ進み、終了します。 – Scadge