程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 緩沖區-c語言 getchar()函數問題

緩沖區-c語言 getchar()函數問題

編輯:編程綜合問答
c語言 getchar()函數問題

#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()就可以了。
希望有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved