读http://www.cublog.cn/u2/75758/showart_1715158.html
有感
helper.h
#ifdef T1
int g_year = 2010;
#else
int g_year;
#endif
int GetTicket();
helper.c
#include "helper.h"
int GetTicket(){
return g_year;
}
util.h
#ifdef T1
int g_year = 1020;
#else
int g_year;
#endif
int SetTicket();
extern int GetTicket();
util.c
#define T1
#include "util.h"
int SetTicket(){
g_year = 700;
return g_year;
}
mail.c
#include <stdio.h>
#include <stdlib.h>
#include "util.h"
int main()
{
printf("头文件中定义/n");
printf("GetTicket=%d",GetTicket());
printf("/nSetTicket=%d",SetTicket());
printf("GetTicket=%d",GetTicket());
return 0;
}
getch()和getche()函数
这两个函数都是从键盘上读入一个字符,即时读入,不需先读入缓冲区。。其调用格式为:
getch();
getche();
两者的区别是:getch()函数不将读入的字符回显在显示屏幕上,而getche() 函数却将读入的字符回显到显示屏幕上。
getchar()函数
getchar()函数也是从键盘上读入一个字符, 并带回显。它与前面两个函数的区别在于: getchar()函数,只有当你按下回车键才从缓冲区读入字符,并且会将回车键也读入。
scanf会被跳过的问题
解决方法最好不用FFLUSH,因为不同的编译器可能不兼容
while(1){
IsInputNum = scanf("%d",&LoginPwd);
//当输入数字时,scanf直接从内存缓冲区中读取
//当输入字符,因类型不配置scanf返回0,输入字符进入内存缓冲区;
//下次scanf会从内存缓冲区取值(取得字符),因类型不配置scanf返回0,会造成死循环
//while ( (cache= getchar()) != '/n' &&cache != EOF ) ;
//作用是在输入字符后取出内存缓冲区中的所有字符,当取到回车符表示内存缓冲区已清空
// '/n' 的ASCII值为10
//例:输入 1AB,变量取值为IsInputNum=0,cache=65/66/10
while ( (cache= getchar()) != '/n' &&cache != EOF ) ;
if( IsInputNum == 0 || 1121987 != LoginPwd){
printf("登录密码错误!/n/n");
printf("请输入你的登录密码:");
continue;
}
break;
}
或改成下面这样就不会有scanf格式化串与输入的类型不一致问题
char LoginPwd[10];
while(1){
scanf("%s",LoginPwd);
if( strcmp(LoginPwd,"1987") != 0 ){
printf("登录密码错误!/n/n");
printf("请输入你的登录密码:");
continue;
}
break;
}