請各位指教一下,如果用scanf語句 這個有什么問題么?
#include <stdio.h>
int main()
{
? ? /* 定義需要計算的日期 */
? ? int year;
? ? int month;
? ? int day;
? ? printf("請輸入年月日\n");
? ? scanf_s("%d,%d,%d",&year,&month,&day);
? ? int sum;
? ? switch (month)
? ? {
? ? case 1:sum = 0; break;
? ? ? ? case 2:sum = 31; break;
? ? ? ? case 3:sum = 59; break;
? ? ? ? case 4:sum = 89; break;
? ? ? ? case 5:sum = 120; break;
? ? ? ? case 6:sum = 150; break;
? ? ? ? case 7:sum = 181; break;
? ? ? ? case 8:sum = 212; break;
? ? ? ? case 9:sum = 242; break;
? ? ? ? case 10:sum = 273; break;
? ? ? ? case 11:sum = 303; break;
? ? ? ? case 12:sum = 334; break;
? ? ? ? default:printf("一年中只有十二個月哦");
? ? }
?
? ? if (year % 400 ==0 || year % 4 ==0 && year%100 != 0)
? ? {
? ? ? ? if (month > 2)
? ? ? ? {
? ? ? ? ? ? sum = sum + day + 1;
? ? ? ? }
????????else
????????????????{??
????????????sum = sum + day;
????????????????}?
? ? ? ? printf("%d年%d月中的第%d天\n",year,month ,sum);
? ? }
? ? return 0;
}
2020-03-20
在VS中這是因為scanf()在讀取數據時不檢查邊界,所以可能會造成內存訪問越界;
---對于某些程序而言,scanf 與 scanf_s 都是一樣的。主要看是否造成 內存訪問越界 問題
如果不讓VS進行這項檢查,可以加上:
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_DEPRECATE
#pragma warning(disable:4996);