c言語入力scanfでgetsの効果を実現

2342 ワード

C言語
にゅうしゅつりょく
読み取りデータの最大桁数
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; }