c++debug&注意事项 自用 持续更新

cin后回车程序直接退出:

加system("pause");在return 0;前面

C++ 控制cout输出的小数位数

C++中的cout.setf()、cout.precision(),ostream成员函数里面的,也可以用输出流操作符来控制;

#include <iostream>
#include <iomanip> 
using namespace std;
int main()
{
	cout << "test 1 =======" << endl;
	double f = 3.1415926535;
	cout << f << endl; // 3.14159
	cout << setiosflags(ios::fixed); //只有在这项设置后,setprecision才是设置小数的位数。
	cout << setprecision(0) << f << endl; //输出0位小数,3
	cout << setprecision(1) << f << endl; //输出1位小数,3.1
	cout << setprecision(2) << f << endl; //输出2位小数,3.14
	cout << setprecision(3) << f << endl; //输出3位小数,3.142
	cout << setprecision(4) << f << endl; //输出4位小数,3.1416
	cout << "test 2 =======" << endl;
	//cout.setf跟setiosflags一样,cout.precision跟setprecision一样
	float a = 0.546732333;
	float b = 3.563768245;
	cout << a << endl;
	cout << b << endl;
	cout.setf(ios::fixed);
	cout.precision(3);
	cout << a << endl;
	cout << b << endl;
	cout.precision(1);
	cout << a << endl;
	cout << b << endl;
	return 0;
}

如果不加cout << setiosflags(ios::fixed);
貌似输出的是有效数字?(好像也不是,存疑)
只有加上才能精确地控制小数点后位数。

编译器错误 C2447

“{”: 缺少函数标题(是否是老式的形式表?)
此编译器在全局范围内遇到了意外的左大括号。 大多数情况下,这是由格式错误的函数头、放错位置的声明或孤立的分号导致的。 若要解决此问题,请确认左大括号跟在格式正确的函数头后面,并且其前面没有声明或孤立的分号。
此错误也可能由旧式 C 语言形式自变量列表引起。 若要解决此问题,请重构参数列表以使用现代样式(即括在括号中)。

// C2447.cpp
int c;
{}       // C2447

注1

#include <stdio.h>

int main()
{
	int a = 3, b = 3;

	(a = 1) && (b = 5);/*既是赋值又是逻辑判断
	此时a已经等于1了,但是b仍然是5,因为
	逻辑与 一假全假 后面语句没有进行赋值和判断*/
	printf("a = %d, b = %d\n", a, b);

	(a = 0) || (b = 4);/*前面a已经等于0了
	但是逻辑或一真全真,无法判断,
	后面语句依然执行赋值和判断*/
	
	(a == 3) && (b == 3);
	/*将a的值与3进行比较,
	比较结果是true或false,
	然后丢弃这个比较结果,
	对printf不起作用*/						
						 
	printf("a = %d, b = %d\n", a, b);
	getchar();
	return 0;
}

注2

count != 0 && sum/count
/*该表达式使用逻辑与(&&)
来确保 sum/count 的除数不为 0。
因为当 count 为 0 时,
并不会导致 sum/0,
因为根据短路求值的原则,
&& 运算符在左侧为假的情况下,
并不会计算右侧的表达式。*/

注3

#include<iostream>
using namespace std;
int main()
{
	int year;
	cout << "请输入一个年份,系统将会自动为您判断是否是闰年:";
	cin >> year;
	if ((year % 4 == 0 && year % 100 != 0) ||( year % 400 == 0))
		cout << "该年是闰年" << endl;
	else
		cout << "该年不是闰年" << endl;
	system("pause");
	return 0;
}

关于#include <stdbool.h>

DEF:

bool 是C++中的关键字,C中不支持
所以C99标准中引入了头文件 stdbool.h,包含了四个用于布尔型的预定义宏
#define true 1
#define false 0
#define bool _Bool
typdef int _Bool

FUNC:

可以使用bool和true、false

输出是1或者0

 1 #define _CRT_SECURE_NO_WARNINGS
 2 
 3 #include<stdio.h>
 4 #include<stdbool.h>
 5 
 6 main()
 7 {
 8     bool b = 6 > 5;
 9     bool t = true;
10 
11     t = 2;
12 
13     printf("%d\n", b);//1
14 
15     system("pause");
16 }

ELSE

以此类推,我们还可以把程序中的
#define <stdbool.h>
改为以下就可以了,不用再去弄头文件:
#define bool int
#define true 1
#define false 0

更新

现在的C语言已经有了布尔型:从C99标准开始,类型名字为“_Bool”。 现在,我们可以简单的使用 _Bool 来定义布尔型变量。_Bool类型长度为1,只能取值范围为0或1。将任意非零值赋值给_Bool类型,都会先转换为1,表示真。将零值赋值给_Bool类型,结果为0,表示假。 下面是一个例子程序。

#include <stdio.h> 
#include <stdlib.h>  
 
int main(){
    _Bool a = 1;
    _Bool b = 2;    /* 使用非零值,b的值为1 */ 
    _Bool c = 0;
    _Bool d = -1;   /* 使用非零值,d的值为1 */ 
    
    printf("a==%d,  /n", a);
    printf("b==%d,  /n", b);
    printf("c==%d,  /n", c);
    printf("d==%d,  /n", d);
 
    printf("sizeof(_Bool) == %d  /n", sizeof(_Bool));
    
    system("pause");
    return EXIT_SUCCESS;
}

运行结果如下:(只有0和1两种取值)

a==1,
b==1,
c==0,
d==1,
sizeof(_Bool) == 1

二进制“<<”: 没有找到接受“const std::basic_string<char,std::char_traits,std::allocator>”类型的右操作数的运算

解决方法:

  1. #include <string.h>这是C语言字符数组的操作函数,不是C++ 的string类,改变cout的相应输出,智能输出字符

  2. #include <string.h>改为#include <string>

posted @ 2021-05-08 21:32  Stéphane  阅读(131)  评论(0)    收藏  举报