學習c語言中遇到的問題
下面的程式中的do_while迴圈在執行時只能輸入一次字元,第二次迴圈時會跳過,請問這是什麼原因??
#include #include #include #include #include int roll_dice(void);
bool play_game(void);
int main(void)
else
printf("play again?(y/n)");
scanf("%c",&ch);//第二次直接會跳過這句導致迴圈結束。
}while(toupper(ch) == 'y');
printf("\nwins:%d. losees:%d.",win,lose);
return 0; }
int roll_dice(void)
bool play_game(void)
}
已解決,此句
printf
("play again?(y/n)");
scanf
("%c"
,&ch)
;
應為
printf
("play again?(y/n)");
scanf
(" %c"
,&ch)
;
不過為什麼??
已解決在第一次輸入時,除了字元"y"以外,還摁下了回車鍵——實際上輸入了兩個字元——但是第一次只讀取了乙個字元,剩下的"回車"留在了緩衝區,所以在第二次迴圈時直接讀取"回車",導致跳過,使用空格可以過濾掉。
還可以利用:fflush(stdin);來清除緩衝區。
C 記錄C語言中由於粗心遇到的奇葩錯誤
1.正確 for word strtok buf,whitespace word null word strtok null,whitespace if strcmp word,the 0 錯誤 for word strtok buf,whitespace word null word strtok...
學習C語言中的位操作
最近在寫程式時,我需要判斷乙個dword 型別變數的某乙個二進位制位是否為1或0,我們都很清楚,dword型別的變數在記憶體中佔32位,現在要我們判斷其中的某一位是0還是1,該如何是好呢?這時我想到了c語言中的位操作,借助位操作,可以實現我們想要的功能。關於位操作,我從網上收集整理的資料如下 一 位...
學習C語言中的位操作
最近在寫程式時,我需要判斷乙個dword 型別變數的某乙個二進位制位是否為1或0,我們都很清楚,dword型別的變數在記憶體中佔32位,現在要我們判斷其中的某一位是0還是1,該如何是好呢?這時我想到了c語言中的位操作,借助位操作,可以實現我們想要的功能。關於位操作,我從網上收集整理的資料如下 一 位...