在做课设时,因为在windows上写了一个输入密码时屏幕显示为***的函数,但是在移植到linux系统上时却有问题,提示有错误。 上网搜索,有人说getch()函数的头文件是curses.h,还有人说是conio.h, 但是在ubuntu系统中都不能使用,再次搜索发现getch()函数并非c标准库函数,所以可能在其他系统中不支持。 因此找到了getpass()这一函数,实现在linux上密码隐藏输入的问题。其所在头文件为<unistd.h>。 getpass()函数的返回值为所输入字符串的首地址,参数可以为想要在屏幕上显示的提示信息。(看到这里感到很惊奇,在c语言中竟然还有和python中差不多的函数,参数可以是提示信息!!!) 而且该函数同样也支持删除已输入的错误字符的功能,确实减少了编程时的麻烦^_^. 代码如下: #include <stdio.h> #include <unistd.h> int main (void) { char *ch 继续阅读 >>


王良 17/07/04 22:42:37
在c语言期末考试中,再次见到了“小明爬楼梯”问题,而第一次见到是在某次面试题中,由于当时还没有学到递归部分,因此就仅仅把代码看了一下,然而其中包含的思想却没有弄清楚,因此在考试时见到该题一头雾水,因此总结一下,以绝后患。 先上题: 可爱的小明特别喜欢爬楼梯,他有的时候一次爬一个台阶,有的时候一次爬两个台阶,有的时候一次爬三个台阶。如果这个楼梯有n个台阶,小明一共有多少种爬法呢? 该题为典型的递归问题,解决的思想当然就要不按常理出牌: 假设当前共有36阶台阶,小明若想到达第36阶台阶,只能选择从第35阶再上1阶,或从第34阶再上2阶,或从第33阶再上3阶,因此要想到达第36阶台阶,需要走的步数为到达之前3级台阶需要的步数之和,即f(n) = f(n-1) + f(n-2) + f(n-3). 示例代码: #include <stdio.h> int f(int n) { if(n == 1) 继续阅读 >>


王良 17/07/03 16:43:06
最近在写实验报告时,由于在机房只能用windows系统,在程序没写完而转战linux时却总是发生出现乱码问题,之前修改几次无果,只好改为英文。今天特地抽出时间来解决这一问题,解决方法如下: 使用iconv命令: iconv -f 原编码 -t 新编码 filename [-o newfile] 使用vim 首先进入vim,以下以文件1.c为例: vim 1.c :set fileencoding //查看文件编码格式 :set fileencoding=utf-8 //修改文件编码为utf-8(linux) :set fileencoding=cp936 //修改文件编码为cp936(windows) 注:linux下默认编码为utf-8, windows下默认编码为cp936 作者:liushall 发表于 2017/06/14 20:16:25 原文链接 http://blog.csdn.ne 继续阅读 >>


王良 17/06/14 20:16:25
今天打开电脑,突然发现之前一直用的很好的搜狗输入法突然炸了,竟然没法输中文,在谷歌了几个解决方法后,终于找到了一个能用的方法。记录下来,已备后用。 解决方法: 关闭搜狗输入法 killall fcitx 删除配置文件 ~/.config //进入搜狗配置文件所在目录 rm -r SogouPY SogouPY.users sogou-qimpanel //删除配置文件 3.重启搜狗即可 作者:liushall 发表于 2017/06/06 21:54:40 原文链接 http://blog.csdn.net/liushall/article/details/72888130 阅读:101 继续阅读 >>


王良 17/06/06 21:54:40
linux兴趣小组2017面试题 1. 分析下列程序的输出. int main(int argc, char *argv[]) { int t = 4; printf("%lu\n", sizeof(t--)); printf("%lu\n", sizeof("ab c\nt\012\xa1*2")); return 0; } 若运行printf(“%d\n”,t); 结果为4,因为sizeof是关键字,且其后面的内容在编译时运算并替换为运算后的数值,在运行程序时直接调用替换值,不再进行t–的运算,故t仍是4. 在进行sizeof运算时,\n、 \012、 \xa1 分别为一个字符,且包含结束符\0. 2. 下面代码会输出什么? int main(int argc, char *argv[]) { int a = 10, b = 20, c = 30; printf("%d %d\n", b = b*c, c = c*2 继续阅读 >>


王良 17/06/03 15:47:43
改变文件属性与权限 chgrp [-R] dirname/filename 改变文件所属用户组 -R 递归更改 chown [-R] 账号名称:组名 dirname/filename 改变文件所有者 chmod 改变文件权限 u=rwx 文件所有者权限为rwx g=rw 所属用户组权限为rw- o=r others权限为r– a+x 所有权限加上x权限(a-x 略) 创建新目录 mkdir [-mp] dirname -m 配置文件案的权限 mkdir -m 711 test 创建权限为rwxr–r–的目录 -p 递归创建目录 删除空目录 rmdir [-p] dirname -p 递归删除目录(必须是空目录) 显示目前所在目录 pwd [-p] -p 显示当前路径,而非使用连接(link)路径,即加-p后显示的时源文件路径,而不是链接文件(类似与快捷方式的路径) 取得路径的文件名与目 继续阅读 >>


王良 17/06/01 23:01:42
vim (Linux下的文本编辑器) a 在光标后添加文本 A 在本行行末添加文本 i 在光标前插入文本 I 在本行开始插入文本 o 在光标下插入新行 O 在光标上插入新行 dd 删除光标所在行 (2dd即删除此下的两行,3dd以此类推) p 粘贴 u 取消上一命令 . 重复上一命令 shift + ‘:’ 进入底行模式 r 替换单个字符(替换模式) R 替换多个字符(替换模式) G 到达最后一行 gg 或 1G 到达第一行 nG 到达第n行 yy 复制一行 nyy 复制n行 set nu 显示行号 q 退出vi编辑器 q! 强制退出vi编辑器 w 保存 wq 保存并退出vi /string 向下搜索字符串string ?string 向上搜索字符串string %s/…/…/g 全文替换文本(g表示全部替换) n1,n2s/…/…/g[c] 只替换n1到n2行的文字(c 代表是否提示替换) 多文件编辑 sp[filename] 进入多文件编辑模式 :n 编辑下一个文件 :N 编辑上一个文件 :files 列出当前vim打开的 继续阅读 >>


王良 17/06/01 20:33:59
A+B Problem III 描述 求A+B是否与C相等。 输入 T组测试数据。 每组数据中有三个实数 A,B,C(-10000.0<=A,B<=10000.0,-20000.0<=C<=20000.0). 数据保证小数点后不超过4位。 输出 如果相等则输出Yes 不相等则输出No 样例输入 3 -11.1 +11.1 0 11 -11.25 -0.25 1 2 +4 样例输出 Yes Yes No ========================================= 该题主要考察实数型数据的比较,需要用 num <= 0.00001 来判断是否相等,而不是用 num1 == num2 来判断,因为0 可能以 0.000001 来存储. ========================== 代码如下: #include <stdio.h> #include <math.h> int main (void) { int 继续阅读 >>


王良 17/05/30 13:01:24
6174问题 描述 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数. 比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4, 输入 第一行输入n,代表有n组测试数据。 接下来n行每行都写一个各位数字互不相同的四位数 输出 经过多少次上面描述的操作才能出现循环 样例输入 1 1234 样例输出 4 ============================================================================================================== 解析: 原本这是一道水题,结果被我想多了,开始以为直接用数字会比较耗时,一直 继续阅读 >>


王良 17/05/30 09:27:05
某地发生了谋杀案,以下为警方得到的4个嫌疑人的证词: A说: 不是我. B说: 是C. C说: 是D. D说: C在胡说. 已知三个人说的真话,一个人说的假话,请编写一个程序判断谁是凶手.(摘自《Linux C编程实战》) 代码如下: #include <stdio.h> int main (void) { int i, sum = 0, flag = 0; char killer; for(i = 0; i < 4; i++)//遍历ABCD四人 { killer = 65 + i; sum = (killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D'); if(sum == 3)//判断是否是三人为真,一人为假 { flag = 1; printf("%c is killer.\n", killer); 继续阅读 >>


王良 17/05/30 09:27:00