c言語入力scanfでgetsの効果を実現
2342 ワード
C言語
にゅうしゅつりょく
読み取りデータの最大桁数
バッファをリフレッシュする3つの方法
scanfの高度な使い方
特定の文字に一致
特定の文字列に一致しない
読み込んだ文字を破棄
まとめ
パスワード入力ウィジェット
ブロッキングサイクリックリスニング
ノンブロッキングループリスニング
にゅうしゅつりょく
読み取りデータの最大桁数
scanf("%2d",&n);// 2 ,
scanf("%10s",str);// 10
バッファをリフレッシュする3つの方法
scanf("%*[^
]");scanf("%*c");// ,
fflush(stdin);//
scanfの高度な使い方
特定の文字に一致
scanf("%[abcd]");// abcd, ,
%[a-z] abc...xyz
%[A-Z]
%[0-9]
%[a-zA-Z0-9] , ,
特定の文字列に一致しない
%[^
] ,
%[^0-9] ,
読み込んだ文字を破棄
%*d //
scanf("%*d %d",&n);
まとめ
%{*}{width}type
type , %d,%s,%[a-z],%[^a-z];type
width ,
* ,
パスワード入力ウィジェット
//passward.c
#include
#include
#include
#define PWDLEN 20
void getpwd(char *pwd,int pwdlen);
int main()
{
char pwd[PWDLEN+1];
printf("input passward:");
getpwd(pwd,PWDLEN);
printf("your passward is:%s
",pwd);
return 0;
}
/**
@param pwd char*
@param pwdlen int
*/
void getpwd(char *pwd,int pwdlen)
{
char ch=0;
int i=0;
while(i0){//
i--;// , bug
printf("\b \b");//
}else if(isprint(ch)){//
pwd[i]=ch;
i++;
printf("*");
}
}
pwd[i]=0; //
}
ブロッキングサイクリックリスニング
#include
#include
//conio.h windows
int main(){
char ch;
int i=0;
while(ch=getch()){//getch() getche()
if(ch==27){
break;
}else{
printf("Number:%d
",++i);
}
}
return 0;
}
ノンブロッキングループリスニング
#include
#include
#include
int main(){
char ch;
int i=0;
// , esc
while(1){
if(kbhit()){//
ch=getch();//
if(ch==27) {
break;
}
}
printf("Number:%d
",++i);
Sleep(1000);// 1
// sleep esc
}//while
return 0;
}