首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言中缓存读取判断后改变实参出现的有关问题

2012-08-30 
C语言中缓存读取判断后改变实参出现的问题C/C++ code#includeleap.h#define MAXYEAR 2099//The maximum

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"头文件,我不知道那里面有什么。
新手,多包涵,帮顶的!!!


[解决办法]
探讨

引用:
我用LZ的程序运行了一下,输入2000回车后,*pYear变为了2000,LZ说的随机是*pYear吗。我这里得出的是确定的。

或者可以运行我的第一段代码,那段代码最能说明我想问的问题!

热点排行