scanf("%s", name) 後,scanf("%c", &sex) 直接讀到換行符,未等待輸入。
%s 讀取字串時以空白字元結束,但結束的空白字元(換行/空格)留在 stdin 緩衝區,下一個 %c 直接消費該字元。
scanf(" %c", &sex); // %c 前加一空格
scanf("%s", name);
getchar(); // 吸收換行
scanf("%c", &sex);
char line[100];
fgets(line, sizeof(line), stdin);
sscanf(line, "%s", name);
fgets(line, sizeof(line), stdin);
sscanf(line, " %c", &sex);
fflush(stdin) 行為未定義,不可移植。%s 不適用,必須用 fgets 或 %[^\n]。