ここではCから始めます。ints
文字列とがのさまざまなフィールドに入力されるループを実行しようとしていますstruct
。「ラストネーム」の入力を求められたら、ユーザーは他の入力なしでEnterキーを押すことができ、ループは終了します。
問題は、このコードではループが終了せず(姓と名の入力要求が同じ行で一緒に実行される)、salaryの値が常に間違っている(0またはいくつかの大きな数)ことです。
while (employee_num <= 2)
{
printf("Enter last name ");
fgets(employee[employee_num].last_name, sizeof(employee[employee_num].last_name), stdin);
if(strlen(employee[employee_num].last_name) == 0)
break;
printf("Enter first name ");
fgets(employee[employee_num].first_name, sizeof(employee[employee_num].first_name), stdin);
printf("Enter title ");
fgets(employee[employee_num].title, sizeof(employee[employee_num].title), stdin);
printf("Enter salary ");
fgets(strng_buffer, 1, stdin);
sscanf(strng_buffer, "%d", &employee[employee_num].salary);
++employee_num;
getchar();
}
代わりにこのコードを試してみると、最初の実行後にループを適切に終了できますが、その後は終了できません(名前の部分でEnterキーを押すと、おそらく\ nクリアできないように見えますか?):
char strng_buffer[16];
while (employee_num <= 5)
{
printf("Enter last name ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].last_name);
if(strlen(employee[employee_num].last_name) == 0)
break;
printf("Enter first name ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].first_name);
printf("Enter title ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].title);
printf("Enter salary ");
scanf("%d", &employee[employee_num].salary);
++employee_num;
getchar();
}
これを意図したとおりに機能させる方法と、このようなエントリのベストプラクティス(つまり、sscanf、fgetsなどの使用)について知りたいです。
前もって感謝します!