C语言中缓存读取判断后改变实参出现的问题
- C/C++ code
#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;}judgeScf函数是想实现对输入的判断,并且改变main函数中的实参的值。不过在做完读取缓存操作之后并且函数运行完成后,main函数中实参的值就变为随机值了,其中函数内部运行都是正确的。苦思冥想不得要领。因为不懂汇编,无法看懂汇编信息,求论坛神人能找出原因。另外,程序是在Cygwin中gcc编译环境下运行的。第一次发帖有点混乱,说明还是不够清晰的话,请多多包涵。
[解决办法]
没注意是c,那么传一个指针就可以了
[解决办法]
不好意思,是我弄错了。对scanf()没了解清楚……
我运行了下,你的程序没问题啊。
只是我没包含"leap.h"头文件,我不知道那里面有什么。
新手,多包涵,帮顶的!!!
[解决办法]