2022年的高考已经结束,准大一的学子们今天起你们不用去深究何是“本手”何是“俗手”,放松起来去疯狂地玩吧! 但是从程序猿写代码的角度来分析我认为程序猿写代码也有本手、俗手之分。
代码格式规范,代码质量中规中矩,bug较少,可以实现需求的代码就似本手;逻辑混乱,bug满屏,虽然能够运行,但是可能是靠着bug跑了起来,代码随时有跑飞的嫌疑,这即是俗手;而代码高手写的叫一个灵动飘逸,就似围棋高手在手谈中“妙手”不断、精妙绝伦也。我承认,我也是一个游离于本手和俗手之间的programmer,虽有时也想神来一手,但奈何level too low,但追求妙手”的勇气和努力不曾减少
本手是不偏不倚,符合棋理的一招棋。它既不过分,也不保守,处于攻防的平衡位置,不一定是最优解,但是正解。无论是作为一名职场人或是一名大学生亦或是一名研究生,都应该做到本手为首,做好当下的自己的本职工作,完美的完成每一次自己导师留给自己的课设足以。生活中处处能下出“本手”,其实并不简单。
妙手,是可遇不可求的,有时被称为神之一手。妙手是灵感的迸发,充满创意和才华。在下棋中,妙手需要经验的积累,对形势的判断要相当敏锐,要具备非凡的洞察力。在生活中妙手要时刻严格要求自己,完美的完成每一件事,可是大多数情况都会不如人意。
俗手就是我们大多数人的一种情况。作为棋手“其实他也不想下俗手啊,但奈何水平有限,”,所以,我们只有不断学习进步,只有我们的水平上来,才能少下出俗手。
在实际开发中我们总是会遇到各种各样的问题,比如下面几种:
功能先上了再说
这像不像你调试代码的样子
这是不是你写完代码的现状
下面我来用几个例子来说明一下
在程序中,如果我们要实现键盘不断输入数字,while()语句不断执行的功能,我们可以采用这样的结构`
#include <stdio.h>
int main()
{
int num=0;
printf("please input data:");
scanf("%d",&num);
while(num>=0)
{
scanf("%d",&num);
printf("%d",num);
printf("please continue input data:"):
}
}
//程序键盘不断输入数字,终端不断打印数据,那么出口条件是什么呢?当用户输入负数时,因为不满足num>0这个条件,程序就会退出循环。
其实我们可以用scanf()函数的返回值来完成while循环里面的条件判断。
#include <stdio.h>
int main()
{
int num=0;
printf("please input data:");
while(scanf("%d",&num)==1)
{
printf("%d",num);
printf("please continue input data:"):
}
}
//利用scanf函数的返回值巧妙的将scanf字符输入和条件判断用一条语句来实现,类似的我们还可以使用ctype.h头文件中的isdigit()函数来对输入的数字进行判断。
同样如果程序要实现统计一段英文中单词的数量,文章的字符数,行数。我们可以这样来实现
/*采用从最后一个空格来判断是不是单词的方法 缺点是停止符如果在下一行的开头会多统计一行*/
#include <stdio.h>
#include <stdbool.h>
int wordsnum;
int rownum;
int charnum;
char ch,temp;
bool space=false;
int main()
{
printf("请输入一段英文,用|符号结束\n");
do
{
ch=getchar();
charnum++;
if(ch=='\n')
rownum++;
if((ch==' ' || ch=='\n' || ch=='|') && space==1){
space=false;
wordsnum++;
}
if(ch!=' ' && ch!='\n')
space=true;
}while(ch!='|');
printf("\n|------------------------|\n");
printf("\tcharnum is %d\n",--charnum);
printf("|------------------------|\n");
printf("\trownum is %d\n",++rownum);
printf("|------------------------|\n");
printf("\twordsnum is %d",wordsnum);
printf("|------------------------|\n");
return 0;
}
改变一下思路其实我们可以这样去实现
//通过第一个字母去判断是不是一个单词,就完美的解决了上述的问题,而且代码逻辑更加的清楚,有条理。
#include <stdio.h>
#include <stdbool.h>
#include <ctype.h>
#define STOP '|'
int main()
{
char c;
char prev;
int n_char=0;
int n_words;
int n_line;
int P_line;
bool inword=false;
printf("请输入:\n");
prev='\n';
while((c=getchar())!=STOP)
{
n_char++;
if(c=='\n')
n_line++;
if(!isspace(c) && !inword)
{
inword=true;
n_words++;
}
if(isspace(c) && inword)
inword=false;
prev=c;
}
if(prev!='\n')
P_line=1;
printf("n_char:%d n_line:%d n_words:%d P_line:%d",n_char,n_line,n_words,P_line);
}