#include "stdafx.h"#include<stdio.h>void main(){float faHeight,moHeight,myHeight; char sex,sport,diet;printf("You are F or M:\n");scanf("%c",&sex); printf("DO you like sport Y/N:\n");scanf("%c",&sport);printf("DO you diet Y/N:\n");scanf("%c",&diet);printf("please check in your father height:\n");scanf("%f",&faHeight);printf("please check in your mother height:\n");scanf("%f",&moHeight);if(sex=='M')myHeight=(faHeight+moHeight)*0.54;elsemyHeight=(faHeight*0.923 + moHeight)/2;if(sport=='Y')myHeight=myHeight*(1+0.02);if(diet=='Y')myHeight=myHeight*(1+0.015);printf("myHeight is %f \n",myHeight);}
2 回答

慕哥9229398
TA貢獻1877條經驗 獲得超6個贊
犯堆棧溢出等的安全檢查。
傳統C函數,scanf()按現代觀點,就屬于不安全函數。。
所以MS 定義了scanf_s()函數,建議用它代替scanf
這只是個警告信息,你初學C語言,建議忽略它。

料青山看我應如是
TA貢獻1772條經驗 獲得超8個贊
從鍵盤輸入的每個字符都會送到輸入緩沖流中,scanf函數從輸入緩沖流中依次讀數據,第一次輸入的回車符也在輸入緩沖流中,而scanf函數遇到空格或換行符就結束,所以第二次scanf時還是從輸入緩沖流中的回車符開始讀,讀到即結束,然后執行下一個語句。
解決方法:
在每個scanf語句后加一句getchar();
因為getchar()函數不會忽略回車符和空格符,也就是說getchar()函數會將回車符或空格符讀出,然后讀下一個字符。這樣下一次scanf()時就是從回車符的下一個字符開始讀了。
- 2 回答
- 0 關注
- 112 瀏覽
添加回答
舉報
0/150
提交
取消