置顶
欢迎大家选修C语言程序设计这门课,本帖解释一下一些常见的问题
叶卡林娜
发表于2017年01月05日
首先欢迎大家选修浙大翁恺老师的C语言程序设计课程。开课2天就看到讨论区已经有这么多帖子,说明同学们的学习热情很高。结合前几次开课的经验以及目前在讨论区的一些问题,先就一些常见问题作下说明。
1. 请不要只看视频课件,而忽略课件当中的富文本的文字说明。
2. 编译环境的安装
如果你用的是Windows操作系统,可以选择使用Dev C++,安装的参考课件为这里;有的学校可能会用VC6.0,这是个比较古老的版本,它带的编译器不支持C99标准,建议还是用Dev C++或者Code::Blocks,当然visual studio也是可以的,但vs中特有的一些函数,OJ是不支持的,提交OJ时需要进行修改。
如果你用的是Mac os,则参考课件是这里;如果是新版的mac系统,在终端输入gcc之后会有下面的提示:
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
此时在终端运行下面这条语句,就可以了(安装完整版的xcode是非必须的)。
xcode-select --install
如果你用的是linux系统,我想你肯定能自己搞定的。
Windows配置好环境后,也是可以在终端(命令提示符)用命令进行编译的,具体怎么配置环境,网上有很多介绍,请善用检索。如果你想用Dev C++这个集成开发环境,那么不用去纠结“终端是什么”,“怎么打开终端”,“去哪里敲gcc”等这些问题。
3. Dev C++编译成功的标志
课件里面演示的是5.8.3版的Dev C++(老版本都可以在这里找到),编译成功后会显示“编译成功”。在较新版本(5.10+)里面,编译成功往往是这样显示的:
错误0,警告0就说明编译成功。按运行(默认快捷键F10)就可以看运行结果。记得每次修改源代码后,需要重新编译,再运行,不然看到的是之前编译好的可执行程序的运行。
但另外需注意的一点,错误0,警告0(Dev C++默认对于警告检查比较弱,看参考下面第9条),只是说明可以顺利通过编译,并不代表程序本身没有BUG。
4. Dev C++点击调试提示“项目没有调试信息,您想打开项目调试选项并重新生成吗?”
在工具栏右侧有TDM-GCC 4.9.2 64-bit Release的选项,切换为TDM-GCC 4.9.2 64-bit Debug(32位可以用TDM-GCC 4.9.2 32-bit Debug),再编译运行。
5. Dev C++使用调试功能时,为什么变量的值没有显示在左边的调试窗口?
默认需要手工输入需要查看的变量,才能在左侧调试窗口显示,如果想在鼠标滑过变量名时自动添加到左侧的话,在Dev c++的工具->环境选项,勾选“浏览Debug变量下的查看鼠标指向的变量”。
6. 关于在线测评系统(Online Judge)
如果以前没有用过任何OJ,可能会觉得我在自己电脑上运行都对,怎么到OJ就判错呢。这个时候很有可能,你有一些不应该的输出,如第一周的题目,输出了类似“请输入一个三位数”这样的友好性提示,这就和需要输出的部分不符。正确的是,当输入123时,输出的所有内容,只有321。多任何字符,包括空格,回车,都将导致系统判断“答案错误”或“请检查输出格式”。但是,请务必养成另一个习惯,在最终输出"\n"以表示输出完毕。可能对于目前的题目,是否输出这个表示结束的符号都将得分,但是在某些情况下,可能就是这个问题导致无法accepted。
7. 有部分同学会把编译器的错误贴上来,而不贴源代码,这样往往我们也无法确定代码问题是什么,所以请务必贴上那段编译器报错的代码,以方便别人来帮你纠错。而且尽量不要贴图片,MOOC的图片在上传时候会缩放,导致看不清楚上面的代码。
8. 更多的练习可以在https://pta.patest.cn/pta/test上找到,其中基础编程题目集是对大家开放的,浙大版《C语言程序设计(第3版)》题目集则是需要买书后,输入读者码才可使用。在pta上遇到的问题,也可以贴到本讨论区来。
9. 在视频当中老师通常是在Mac环境下,此时使用的编译器是Clang(LLVM),对于代码的检查是比较严格的。而大部分同学是在Windows环境下的Dev C++进行学习,Dev C++默认的编译器GCC对于代码的检查不太严格,但是可以通过增加参数,让它把所有Warning显示出来,具体的做法是:在工具->编译选项,按照下图填写:
注意设定的编译器配置和当时选用的编译器(右上方下拉菜单)上的是一致的,才有效。
10. OJ里面的测试数据范围是做什么用的?
在OJ上面经常会看到测试数据的范围,就比如第二周的0-2359,其实这个提示并不是让你在程序里面加上一条判断语句去检验系统设置好的测试数据是不是在这个范围内的。他已经告诉你在这个范围内,那么何必加一条判断呢?那么这个范围是用来做什么的呢?是提示你如何去选择要使用的数据类型和结构,测试数据是0-2359的整数,很自然可以想到int就够了。但比如这是一个计算阶乘的题目,告诉你测试数据是1-15,那么用int来记录结果就不够用了,如果是1-100,那么long long也不够用了,需要用到后面才会学到的数组。
11.如何像老师一样在sublime text里面运行C代码?
在Sublime Text写完代码后按 shift + command + B,会提示“clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated”。因为需要配置下Build,具体方法为
在菜单中:Tools -> Build System -> New Build System
然后拷贝以下内容:
{
"cmd": ["gcc", "${file}", "-o", "${file_path}/${file_base_name}"],
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c",
"variants":
[
{
"name": "Run",
"cmd": ["bash", "-c", "gcc '${file}' -o '${file_path}/${file_base_name}' && '${file_path}/${file_base_name}'"]
}
]
}
保存为C。以后就可以选择Tools -> Build System -> C(或者快捷键shift + command + B),来编译和运行C的程序了。
祝大家学习愉快!能够坚持到最后,拿到证书。
分享
25
回复