#include
struct Stu {
int num;
char name[10];
char sex;
char job;
union c_p {
int b_class;
char postion[20];
}spec;
} person[2];
int main()
{
printf("enter data:\n");
printf("*******************************************************\n");
printf("注:姓名 學號 性別 工作 以enter鍵隔開!\n");
for (int i = 0; i < 2; i++)
{
gets_s(person[i].name, 10);
scanf_s("%d", &person[i].num);
person[i].sex = getchar();
person[i].job = getchar();
if (person[i].job == 't' || person[i].job == 'T')
{
printf("postion: ");
gets_s(person[i].spec.postion,20);
}
else if (person[i].job == 's' || person[i].job == 'S')
{
printf("class: ");
scanf_s("%d", &person[i].spec.b_class);
}
else printf("\nerro!!!!!!!!!!!!!");
}
for (int i = 0; i < 2; i++)
{
if (person[i].job == 't' || person[i].job == 'T')
printf("%d: %s %c %c %s\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].spec.postion);
else if(person[i].job == 's' || person[i].job == 'S')
printf("%d: %s %c %c %s\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].spec.b_class);
}
}
總數出錯為什麼 當我給person[i].sex輸入參數時 結果程序認為我給person[i].job輸入的參數 這是為什麼 與緩沖區有關系麼? 小白一名 謝謝大家的幫助
這個問題很常見,主要原因出在 標准輸入和鍵盤緩沖區的關系不清楚。
分析: scanf函數 從鍵盤緩沖區讀取一個字符,轉換為相應類型的數據存到變量中去,getchar函數也是。
具體:當你鍵入具體值時,例如:張三\n 11\n男\n教師\n時,getchar函數此時給性別賦的值是第二個\n,給職業賦值時就成了男,結果就成了上述問題。
解決方法:(1)在每個getchar前面加入 清除鍵盤緩沖區的函數 fflush(stdin),頭文件是 stdlib.h (2) 每個getchar前面用一個字符處理掉\n,char ch=getchar()就可以了。
希望有所幫助。