C语言中缓存读取判断后改变实参出现的问题
#include"leap.h"#define MAXYEAR 2099 //The maximum year limit#define MINYEAR 1900 //Minimum year limit#define MAXMONTH 12 //The maximum month limit#define MINMONTH 1 //Minimum month limitint main(void) { int year = 1900; int month = 1; int* p = &year; judgeScf(&p, &month); printf("%d\n",year); printf("%d\n",month); return 0; }int judgeScf(int** tempyear, int* tempmonth) { char bufTemp = '\0'; if ((tempyear == NULL) || (tempmonth == NULL)) { return 0; } do { if (**tempyear <= MAXYEAR && **tempyear >= MINYEAR) { printf("Please input year!\n"); } else { printf("Data error! Please input year!\n"); } scanf("%d", *tempyear); scanf("%1[^\n]",&bufTemp); /*判断缓存中的内容,如果得到的首字符不是回车或者'\0'即视为输入非法*/ if(!(bufTemp == '\0' || bufTemp == '\r')){ printf("The data has forbidden character!"); return 0; } bufTemp = '\0'; } while (**tempyear > MAXYEAR || **tempyear < MINYEAR); do { if (*tempmonth <= MAXMONTH && *tempmonth >= MINMONTH) { printf("Please input month!\n"); } else { printf("Data error! Please input month!\n"); } scanf("%d",tempmonth); scanf("%1[^\n]",&bufTemp); if(!(bufTemp == '\0' || bufTemp == '\r')){ printf("The data has forbidden character!"); return 0; } bufTemp = '\0'; } while (*tempmonth > MAXMONTH || *tempmonth < MINMONTH); return 1;}