检索关键字:CodeBlocks,编译器
: 发现群里这个16.01版本,有编译器,但是编译器默认路径不对,需要自动检测一下,具体方法如下:
点主菜单settings, 选compiler, 再新窗口点ToolChain executable选项卡,然后点Auto-detect
![W~KE1}}LJ06DDT81(U{0$6.png
注意:CodeBlocks网络上有带编译环境的,有不带编译环境的,群里下载的是带编译环境的,编译器就在其安装目录下的“MinGW”目录中。
你是否遇到过无法创建工程或者工程目录的困惑?(比如这样)
一般来说这是一个权限错误,编译器本身没有问题——你选定的目录需要“管理员权限”:
- 请检查目录权限(尽量不要将其放到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’
void main主函数没有返回值,main 默认为int 型,即 int main(), 返回整数。注意,新标准不允许使用默认返回值,即int不能省,而且对应main函数不再支持void型返回值,因此为了使程序有很好的移植性,强烈建议使用:
int main()
{
return 0; /* 新标准主函数的返回值这条语句可以省略 */
}
检索关键词:C++保留小数
原问题为:
这两个用法有啥区别吗 ?
cout<<setiosflags(ios::fixed)<<setprecision(x);//注意x最大6位
两者效果相同,理论上没什么区别,只是上面部分“cout<
检索关键词:1137
一般来说这道题都是没有考虑到空格的情况——scanf在遇到空格的时候会终止
gets(str);//在Oj平台上是支持gets函数的,但在本地可能无法跑,会提示gets没有定义
有兴趣可以看看这个:
危险函数gets()几种完美的替代方法
检索关键词:C++ %*s的替代 scanf 格式化输入输出
原问题:
很多时候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
6487572是一个地址值,你问我怎么得到的?
拜托,printf就不要加&啊!
扩展阅读:C语言*运算符和&运算符
检索关键词:65535
检查变量初始化情况(
PS:65535是计算机16位二进制最大数,有的编译器为未初始化变量赋值为0,有的赋值为65535
检索关键词:内存错误
参考一下?:https://blog.csdn.net/c_base_jin/article/details/26149653/
检索关键词:0.000000
看下面这几段代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{ double a,b;
scanf("%f %f",&a,&b);//错误原因:double要用lf来获取输入
printf("%lf",a*b*1/2);
return 0;
}
//输出为0.000000
#include <stdio.h>
#include <stdlib.h>
int main()
{ int a,b;
scanf("%d %d",&a,&b);
printf("%lf",a*b*1/2);//错误原因,整型+-*/整型还是整型,lf只能输出浮点型
//修正方法在表达式中乘上一个浮点数*1.0
return 0;
}
//输入类似3 3的数据,输出为0.000000
//Compiler:MinGW
//IDE:CLion
//gcc版本8.1.0
int main(void)
{
long double bug=5.34e-7;
printf("%Lf or %Le\n", bug, bug);
return 0;
}
//解决参考:https://blog.csdn.net/qq_43019319/article/details/108981302
检索关键词:格式化输出 格式 1005: 整数幂 精度损失
1 1 1 5 25 125 100 10000 1000000
左对齐,请使用%-xd (x为占位数,无数据用空格填充)
同,右对齐为%xd
慎用pow:请看一下代码
#include<stdio.h >
#include<math.h>
int main()
{
int a,b,c,d,e,f,g,m,n;
scanf("%d %d %d",&a,&b,&c);
d=pow(a,2);
e=pow(a,3);
f=pow(b,2);
g=pow(b,3);
m=pow(c,2);
n=pow(c,3);
printf("%-9d%-9d%-9d\n",a,d,e);
printf("%-9d%-9d%-9d\n",b,f,g);
printf("%-9d%-9d%-9d\n",c,m,n);
return 0;
}
在WinMG编译器(CodeBlocks)你可能会得到:
**原因是:pow的double的返回值,在浮点计算中会产生精度的偏差
扩展阅读:【标准输入输出scanf() printf()参数参照表】
首先是:”printf”
标准输出格式写作:%[flags][width][.prec][hlL]type
详细参数:
然后是scanf
标准获取输入格式写作:%[flag]type