很久之前就开始思索这个密码该怎么弄了, 不过一直在写订票系统的其他模块, 这个模块始终还是没写. 昨天看 primer plus 突然没了思路, 不想看了, 然后就开了本本敲了这个程序, 具体运行下来还是不错的. 本人大二菜鸟一个, 大一基本荒废了, 也就c比其他人还好点, 可是相对于大神, 咳咳...
虽然知道具体实现起来一定不会这么简单, 为了加密什么的, 但是用于自己写的小程序也够了哈 = =!
好了, 上代码, 欢迎各位新手一起交流共同进步, 为了两年后的应聘= =为了这份热情.
#include <stdio.h> #include <conio.h> #include <ctype.h> #define LEN 7 int main( void ) { char ch[LEN]; int i; printf( "input: " ); for( i=0; ; i++ ) { ch[i] = getch(); if( !isprint(ch[i]) ) // if( 32>ch[i] || 126<ch[i] ) 不是可打印字符进入循环 { if( '\b' == ch[i] && 0 != i ) { // 非第一个字符的退格键进行操作 printf( "\b \b" ); i -= 2; } else if( ('\n'==ch[i] || '\r'==ch[i]) && LEN-1 == i ) break; // 第七个字符的回车结束输入 else i--; // 其他字符无效, 没有响应 // continue; } else if( LEN-1 != i ) printf( "*" ); // 为输入的字符遮盖*号 else i--; // 阻止输入第七个非\n的字符 } printf( "\n密码: %s\n", ch ); return 0; } // end //printf( "%%" ); // 输出百分号要用两个..这是换义符号... /*if( '\b' == ch[i] ) // 判断相等把常量写在左边, 不然到处都是错误 { if( 0 == i ) { i--; continue; } printf( "\b \b" ); i -= 2; continue; }*/ //简化 0 ==i的情况, 加入'b'的判断中去 /* if( LEN-1 == i ) if( '\r' == ch[i] ) break; else { i--; continue; } // 注意条件- -else判断 */ /*ch[0] = getch();printf( "*" );ch[1] = getch();printf( "*" );ch[2] = getch();printf( "*" );*/ // 这一段用来实验自己想法的, 忽略它 // printf( "%d %d %d %d", '\n', '\r', ' ', ' ' ); // 10换行 13回车 32空格 9制表 这一段是为了看看电脑里回车键到底会读取哪个字符, 最后结果看还是读取了\r, \n被直接扣掉了么
又在书上看到getch移植性不好, getchar更好..那, 就要用程序改成getchar读取字符,然后马上用\b*覆盖掉, 在有不符合的字符输入时无视之..但是输入[enter]怎么破,退不回去.
over