新手问个C中用户输入的问题
刚学C不到三个月,问一下各位大神一些控制台用户输入的问题。
现在搞一个简单文件加密的程序,想实现两个效果:
1.文件加密前,要输入密钥,但是用scanf的话,会直接显示在屏幕上,我现在换用getch,然后再用putchar('*')输出星号,这样密钥不会直接显示出来,而用户也知道输入了多少个字符,但有个问题,如果用户按退格想删除前面一个字符,就不好办了,问题主要是显示的星号无法删除,如果我输入一个\b,那么仅仅是光标回去了,并不会删除前面那个星号,当然我接收密钥的字符数组中要删除前面那个字符还是没有问题,这在功能上没有大碍,但是总觉得显示效果上不太好,用户可能并不知道是否删没删,所以想问一下怎么实现scanf那种效果,但是输入的字符不回显的,而是输出星号或别的字符的?
2.加密要输入源文件盒目标文件,当用户输了源文件后,我想用户再输入目标文件时,默认目录就是源文件的目录,比如源文件是D:\file\1.rar,然后要用户输目标文件时,默认就是D:\file\,接下来要用户补全,但是,如果用户不想放在同一个目录里面的话,要能修改这个默认目录,由于第一个问题无法解决,所以这个问题也没解决。
我搜了一下,发现有些人说putchar或者其他方法输出到屏幕上的字符就不能删掉了,真的这样吗。。 C 输入输出
[解决办法]
1.的确是程序输出到屏幕上的字符就不能删掉了,估计只能重新描画窗口。。
那就不输出*,Linux就是这样的。
2.把用户输入的路径存到一个字符串中,然后处理一下,遇到\就变成\\就行了,
然后将这个路径strcat 1.rar,打开这个路径,看文件是否存在.
[解决办法]
1.首先你必须确认你收到的是\b
然后用' '覆盖'*',再'\b'
if((c = getch()) == '\b')
printf(" \b");
int i, j = -1;
for (i = 0; i < strlen(srcdir); i++)
if (srcdir[i] == '\\') j = i;
if (j == -1
[解决办法]
i - 1 == j) 提示不合法;
strncpy(srcpath, srcdir, j);