检索关键字:CodeBlocks,编译器

: 发现群里这个16.01版本,有编译器,但是编译器默认路径不对,需要自动检测一下,具体方法如下:
点主菜单settings, 选compiler, 再新窗口点ToolChain executable选项卡,然后点Auto-detect
![W~KE1}}LJ06DDT81(U{0$6.png

注意:CodeBlocks网络上有带编译环境的,有不带编译环境的,群里下载的是带编译环境的,编译器就在其安装目录下的“MinGW”目录中。


你是否遇到过无法创建工程或者工程目录的困惑?(比如这样)
image.png
一般来说这是一个权限错误,编译器本身没有问题——你选定的目录需要“管理员权限”:

  • 请检查目录权限(尽量不要将其放到C盘,权限问题大多无解)
  • 是否已经存在相关目录或者目录可能为只读状态
  • 在非C盘的其他磁盘的根目录尝试创建操作是否也报错?

    检索关键字:1037,浮点数,精度问题,误差

    原题链接:http://acm.zzuli.edu.cn/problem.php?id=1037
    请看错误代码示例:
    ![EN5BE@J$_M$~09IDR(3F4J.bmp
    错误原因:浮点数特性:无法做到无限精度
    修正:使用“ fabs(b) <= 1e-10 ”来判断非法除数
    解析:

    如果你确实就是想判断 y 是不是 0,那么是可以直接写 y != 0 的。如果这个 y 有别的作用,比如作为除数参与其他运算,由于 C 语言不支持无限精度计算,一个极小的非零数和零一样可能导致异常的结果,因此需要排除这种情况。(知乎)

用浮点方式表示实数时,实数的小数部分在十进制转二进制时会出现无限循环,只能截断,所以就不准确了,是对这个实数的近似。

那么,当这个数的精度无限大后,它对于编译器来说,就等价为”0”了

进阶以及参考资料:
【参考手册:基础类型】
【参考手册:浮点误差】

检索关键词:error:’main’must return ‘int’

截屏2021-09-11 下午10.58.55.png
void main主函数没有返回值,main 默认为int 型,即 int main(), 返回整数。注意,新标准不允许使用默认返回值,即int不能省,而且对应main函数不再支持void型返回值,因此为了使程序有很好的移植性,强烈建议使用:

  1. int main()
  2. {
  3. return 0; /* 新标准主函数的返回值这条语句可以省略 */
  4. }

截屏2021-09-11 下午11.02.35.png

检索关键词:C++保留小数

原问题为:
这两个用法有啥区别吗 ?
)4PY7N5)}Y)6~`322Z]LMO8.png

  1. cout<<setiosflags(ios::fixed)<<setprecision(x);//注意x最大6位

两者效果相同,理论上没什么区别,只是上面部分“cout<

检索关键词:1137

一般来说这道题都是没有考虑到空格的情况——scanf在遇到空格的时候会终止

  1. gets(str);//在Oj平台上是支持gets函数的,但在本地可能无法跑,会提示gets没有定义

有兴趣可以看看这个:
危险函数gets()几种完美的替代方法

检索关键词:C++ %*s的替代 scanf 格式化输入输出

原问题:
image.png

很多时候c++里面的cin最好还是用格式化输入来实现输入,毕竟流输入底层跟scanf类似
cin其实是c++在C语言输入输出上进行封装的一个标准静态对象,然后进行封装了一系列的方法和属性,重载了>>流运算符
https://blog.csdn.net/idealhunting/article/details/88042174 https://zh.cppreference.com/w/%E9%A6%96%E9%A1%B5 https://www.cnblogs.com/lsgxeva/p/7696410.html

C语言中%s中是什么作用?

在scanf中使用,则添加了的部分会被忽略,不会被参数获取。 例如:int a,b;char b[10];scanf(“%d%s”,&a,b);输入为:12 abc那么12将会读取到变量a中,但是后面的abc将在读取之后抛弃,不赋予任何变量(例如这里的字符数组b)

printf(“%s”, 10, s); /意思是输出字符串s,但至少占10个位置,不足的在字符串s左边补空格,这里等同于printf(“%10s”, s);/
printf(“%.
s\n”,int,str) ;
// %.s 其中的.表示显示的精度 对字符串输出(s)类型来说就是宽度
// 这个代表的值由后面的参数列表中的整数型(int)值给出
例如:
printf(“%.
s\n”, 1, “abc”);// 输出a
printf(“%.s\n”, 2, “abc”);// 输出ab
printf(“%.
s\n”, 3, “abc”);// 输出abc >3是一样的效果 因为输出类型type = s,遇到’\0’会结束

检索关键字:答案错误

让我猜一猜,你是:
大小写错了?

检索关键字:Segmentation fault 输入了没反应

一般来说初期编程报错这个,你大概缺了一个&
其他关于Segmentation fault可以点这里参考

检索关键字: 6487572

image.png
6487572是一个地址值,你问我怎么得到的?
拜托,printf就不要加&啊!
扩展阅读:C语言*运算符和&运算符

检索关键词:65535

检查变量初始化情况(
PS:65535是计算机16位二进制最大数,有的编译器为未初始化变量赋值为0,有的赋值为65535

检索关键词:内存错误

参考一下?:https://blog.csdn.net/c_base_jin/article/details/26149653/

检索关键词:0.000000

看下面这几段代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. { double a,b;
  5. scanf("%f %f",&a,&b);//错误原因:double要用lf来获取输入
  6. printf("%lf",a*b*1/2);
  7. return 0;
  8. }
  9. //输出为0.000000
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. { int a,b;
  5. scanf("%d %d",&a,&b);
  6. printf("%lf",a*b*1/2);//错误原因,整型+-*/整型还是整型,lf只能输出浮点型
  7. //修正方法在表达式中乘上一个浮点数*1.0
  8. return 0;
  9. }
  10. //输入类似3 3的数据,输出为0.000000
  1. //Compiler:MinGW
  2. //IDE:CLion
  3. //gcc版本8.1.0
  4. int main(void)
  5. {
  6. long double bug=5.34e-7;
  7. printf("%Lf or %Le\n", bug, bug);
  8. return 0;
  9. }
  10. //解决参考:https://blog.csdn.net/qq_43019319/article/details/108981302

检索关键词:格式化输出 格式 1005: 整数幂 精度损失

1 1 1 5 25 125 100 10000 1000000

左对齐,请使用%-xd (x为占位数,无数据用空格填充)
同,右对齐为%xd


慎用pow:请看一下代码

  1. #include<stdio.h >
  2. #include<math.h>
  3. int main()
  4. {
  5. int a,b,c,d,e,f,g,m,n;
  6. scanf("%d %d %d",&a,&b,&c);
  7. d=pow(a,2);
  8. e=pow(a,3);
  9. f=pow(b,2);
  10. g=pow(b,3);
  11. m=pow(c,2);
  12. n=pow(c,3);
  13. printf("%-9d%-9d%-9d\n",a,d,e);
  14. printf("%-9d%-9d%-9d\n",b,f,g);
  15. printf("%-9d%-9d%-9d\n",c,m,n);
  16. return 0;
  17. }

在WinMG编译器(CodeBlocks)你可能会得到:
image.png**原因是:pow的double的返回值,在浮点计算中会产生精度的偏差

扩展阅读:标准输入输出scanf() printf()参数参照表
首先是:”printf”
标准输出格式写作:%[flags][width][.prec][hlL]type
详细参数:
image.pngimage.png

image.pngimage.png
然后是scanf
标准获取输入格式写作:%[flag]type
image.png
image.png