程设思维实践-第一节课重点与问答
为什么超过1M不可以开临时变量的数组
在部分网站中,栈空间可能有限,可能会发生栈空间溢出。函数内定义的变量在栈区,通常空间比较小,建议开在全局或者new一个在堆区。
那怎么手动加栈呢?
一般是改编译连接器命令,加一句 -Wl,–size=xxxx。(xxxx的单位是kb)
简单的文件操作
提高调试效率,但是测评一定要去掉。
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
调试
对于DEV C++而言,
1.打上断点;
2.F5调试,F6停止;
3.F7进行下一步,F8执行并进入下一条语句。
对于Linux下VS Code而言,
1.点击左侧调试按钮(一定要打开一个文件夹。新建一个文件,选中程序即代码文件再进行配置。);
2.选择语言,如C++;
3.选择g++……
4.选择断点,点击左上角g++.exe生成……
5.单步调试(进入函数),单步跳过(不进入函数)
注意要在终端下输入数据。
Input/Output
建议只使用cstdio,而不使用iostream,cin慢。
格式化输入输出到标准IO
//使用scanf和printf
//输入:
%d:int %c:char %u:unsigned
%lld:long long %lf:double %f:float
//输出:
%.2f:double(注意double的输出是%f)
//可以通过输入输出的 %? %? 来进行数据类型转换。
%#p (可以输出地址)
scanf("%s",s);
scanf("%s",s + 2);
scanf("%s",s + 5);
printf("%s",s);
格式化输入输出到字符串
getchar()
单字符输入输出
预先将所有bytes当作char类型读到数组作为缓冲区,再从缓冲区中模拟读入。
快速读入、缓冲区冲刷
并非printf就输出,而存在缓冲区。在一些交互题目当中必须要使用,比如:让你猜一个预先确定的100以内的一个数直到猜对。
fflush(stdout);
无明确终止(需使用文件操作)
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
while(scanf("%d",&a) != EOF){
//到文件结尾
}