Life of xhu

About

一定要好好用Git & NCRE代码"鉴赏"

Apr 26, 2014

  |   #日常   |   #吐槽

在我周围的同学里面,我算是用Git比较多的人了,据我所知,大部分计算机学院的学生在本科毕业的时候,还不知道Github有什么作用,更谈不上用Git来管理自己的项目了。当然,我自己也不能说对Git非常精通,其实在这次本地分支发生事故之前,Github于我,不过是一个能够装B的在线网盘而已,但是这次本地分支错乱事故,却让我知道了适当地使用版本管理系统来管理代码是多么的重要。

这次本地分支错乱是发生在我最近一直在折腾的项目,也就是我这个博客,这个博客总共有ABCD四个版本,最早的版本A还在我的Github上,当然这个项目已经不可能更新了,BC是差不多的风格,C就是在B的风格上修改来的,而且改动很小,所以我的电脑上并没有存在B这个版本,只能找到C了,而在CD这个过渡上,我因为对Git的不了解,没有习惯checkoutmerge这些命令,结果发生了真正让人蛋疼的事。

我还是和以往一样先新建了一个文件夹,在里面做好了D整个项目,然后把C里面的.git目录拷贝进D,然后推送,果断不行,提示我要pull一下,我当然不pull了,不然差异文件会多到我改的想死,所以我干脆建了一个新的branch,总算是把项目推到Github上了,可是当要往Heroku上部署的时候,又出错了,让我必须pull,我哪敢pull。这时我想,反正这个项目以后肯定会在D的基础上进行,干脆就合并到主分支吧,可是因为我是在C之外的地方建的项目,merge命令根本不好使啊有木有!合并不到主分支,推不到Heroku,一下子进入恶性循环了Orz。。。

最终的解决办法,在Github上建了一个新repo,专门放D项目,Heroku上的项目删除了重新create了一个同名的推了上去。具体来说,就是浪费了Github上的一个repo,并且丢失了Heroku上关于这个博客的所有提交记录,损失惨重。。。

所以说,以后一定不能还是和这次一样,在主分支之外建立修改项目,这样会对后来的管理非常麻烦,几乎肯定只能通过建立新repo来解决。我也要通过这篇博文监督自己,今后开发绝对要遵守如下步骤:

  1. 建立新分支(git branch

  2. 切换到新分支进行开发(git checkout

  3. 合并到主分支(git merge

昨天在折腾Git的时候,还有一个小发现,在Github上建立新仓库的时候,本地添加远程仓库有两种方式,如果使用https方式,那么每次push都要输入用户密码,如果使用ssh方式,只要在Github上添加好正确的key,那么每次push都会用这个key来验证,而不用输入用户名和密码了,方便多了啊有木有~~

~~~~~~~~~~~~我是萌萌的昏割线~~~~~~~~~~~~~

昨天下午的时候,堂弟突然找到我,让我帮他做一道编程题,直觉告诉我,又会是NCRE的脑残题,上了QQ,果然一个txt文件发了过来,内容如下:

//四、程序实例
//要求:把一线性表(元素个数不大于11个)按顺序存储放入计算机存储空间
//下面是程序实例,但可能存在语法错误和逻辑错误,请编译并进行调试。
//程序实例
#include<stdio.h>
#define max 10
void main()
{ int i=0,x,*num,ch;
int list(max);
printf(Input list:);
while((ch=getchar())!='\n')
{ list[i]=ch;
i++;
}
*num=i-1;
for(i=0;i<=*num;i++)
{ printf("list[%d]=%c\n",i,list[i]);
}
printf("\n");
}

不得不说,第一眼看到main函数的返回值类型我就已经醉了,浓浓的谭浩强风格,当然,如果这道题把这个地方当做错误来让人纠正,那还是孺子可教的。

放上这份代码的意义就是要说明,NCRE是多么不值得考的一个东西,如果是别的专业的人考这个也就罢了,我最不能理解的是居然有些公司招聘计算机专业的学生还会问是否有NCRE证书,我实在不知道这样的代码除了让人变蠢之外还能有什么别的作用。

如果要纠正的话,这道题的错误也是很明显的,数组声明错误,没有给num分配内存,以及参数类型和数据类型不匹配。真要改的话,改成下面这样子就OK了。

#include <stdio.h>
#include <stdlib.h>
#define max 10
int main(){ 
    int i=0, x, *num;
    char list[max], ch;
    printf("Input list:");
    while((ch=getchar()) != '\n'){
        list[i] = ch;
        i++;
    }
    num = malloc(sizeof(int));
    *num = i - 1;
    for(i=0; i <= *num; i++){
        printf("list[%d]=%c\n", i, list[i]);
    }
    printf("\n");
}  

不过,如果真的要满足上面题意这种要求,链表实现不是更好么?

#include <stdio.h>

typedef struct list{
    char value;
    list * next;
}list;

int main(){ 
    list *l = new list;
    list *start = l;
    char ch;
    printf("Input list:");
    while((ch = getchar()) != '\n'){ 
        l->value = ch;
        l->next = new list;
        l = l->next;
    }
    l->next = NULL;
    while(start->next != NULL){
        printf("%c", start->value);
        start = start->next;
    }
}