从C到C++入门篇(一)新类型和标准输入输出

34 篇文章 0 订阅
14 篇文章 0 订阅

C++

C -> C++

更严格的类型检查

C 语言中 const * ->non-const* / void * ->sometype * / type -> type 均是可以的,但是在 C++中则编译通不过。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    const int a = 10;
    int *pa = &a;
    char *p = malloc(100);
    int arr[2][3];
    int **pArr = arr;
    return 0;
}

逻辑类型 bool

C++中 bool 类型是一种逻辑类型,其值只有 true 和 false。

c 语言的逻辑真假用 0 和非 0 来表示。而 C++中有了具体的类型,但其本质,仍是
一个 char 类型的变量可被 0 和非 0 的数据赋值。

#include <iostream>
using namespace std;
int main()
{
    bool flag = true;
    if(flag)
         printf("flag is true\n");
    else
        printf("flag is flase\n");
    
    printf("sizeof(flag) = %d sizeof(bool) = %d\n",sizeof(flag),sizeof(bool));
    
    flag = 100;
    printf("flag = %d\n",flag);
    return 0;
}

输出
flag is true
sizeof(flag) = 1 sizeof(bool) = 1
flag = 1

真正的枚举

c 语言中枚举本质就是整型,枚举变量可以用任意整型赋值。
而 C++中枚举变量, 只能用被枚举出来的元素初始化。枚举的常被用来取代宏常量。

#include <iostream>
using namespace std;
enum season {SPR,SUM,AUT,WIN};
int main()
{
    enum season s = SPR;
    s = 0;//error :invalid conversion from 'int' to 'season'
    return 0;
}

可被赋值的表达式

c 语言中表达式通常不能作为左值的,即不可被赋值,C++中某些表达式是可以赋值的。

int main(){
    int a ,b= 10;
    a = b = 100;
    printf("a = %d, b = %d\n",a,b); //a = 100, b = 100
    
    (a = b) = 100; //error :表达式在c语言中是不能作为左值的
    printf("a = %d, b = %d\n",a,b);
    
    
    (a<b? a:b)= 200; //error :表达式在c语言中是不能作为左值的

}
#include <iostream>
using namespace std;
int main(void)
{
    int a,b = 5;
    (a = b) = 100; //b赋值给a , a=5 , 100赋值给a
    cout<<"a = "<<a<<" b = "<<b<<endl;  //a = 100 b = 5
    
    (a<b? a:b)= 200; //c++中表达式可以作为左值
    cout<<"a = "<<a<<" b = "<<b<<endl; //a= 100 b = 200
    return 0;
}

Input&Output 标准输入与输出

cin 和 cout 是 C++的标准输入和输出流对象。他们在头文件 iostream 中定义,
其意义作用类似于 c 语言中的 scanf 和 printf。

流对象含义隐含设备流对象含义隐含设备
cin标准输入流键盘cout标准输出流屏幕
cerr错误输出流屏幕clog日志输出流屏幕

#include <iostream>
using namespace std;
int main() {
//    char buf[20];
//    scanf("%s", buf);  //不安全
//    gets(buf);//不安全
//    cin>>buf;//不安全
//更安全的输入字符串
//    fgets(buf, 20, stdin);//不安全

    string buf;
    cin>>buf;
    cout<<"buf= "<<buf<<endl;
    cout<<"buf size= "<<buf.max_size()<<endl; //buf size= 9223372036854775807


    int a;
    char b;
    
    cin>>a>>b; //等价于 cin>>a ; cin>>b;
    //44 d
    //44d
    cout<<a<<b<<endl;
    return 0;
}

cout 格式输出

c 语言中 printf 拥有强大的格式化控制。C++亦可以实现,略显复杂。


#include <iostream>
#include <iomanip>
//#include <bits/stdc++.h>
using namespace std;
int main() {


    int a=12345;
    float b=4.5678910;
    printf("a = %-8d--\n", a);// 输出 : a = 12345   --
    printf("b = %f\n", b); // 输出 : b = 4.567891
    printf("b= %10.2f\n",b);// 输出 :b=       4.57

    cout<<"a = "<<setiosflags(ios::left)<<setw(8)<<a<<"--"<<endl; //输出 : a = 12345   --
    cout<<"b = "<<b<<endl; //输出: b = 4.56789
    cout<<"b = "<<setiosflags(ios::fixed)<<setprecision(2)<<setw(10)<<b<<endl;//输出 b = 4.57
    
    return 0;
}

进制输出


#include <iostream>
#include <iomanip>
//#include <bits/stdc++.h>
using namespace std;
int main() {
    int a=12345;
 
    printf("%x\n",a);//16进制输出
    printf("%o\n",a);//8进制输出
    printf("%d\n",a);//10进制输出

    cout<<hex<<a<<endl;//输出16进制
    cout<<oct<<a<<endl;//输出8进制
    cout<<dec<<a<<endl;//默认

    cout<<setbase(16)<<a<<endl;//设置16进制
    cout<<setbase(8)<<a<<endl;//设置8进制
    cout<<setbase(10)<<a<<endl;//设置10进制

#include <bitset>//需引入

    cout<<bitset<16>(a)<<endl;//输出16位二进制数

    return 0;
}

域宽/对齐/填充

#include <iostream>
#include <iomanip>
using namespace std;
int main() {


    int a=1234;
    cout<<setw(10)<<a<<endl; //输出:      1234
    cout<<setw(10)<<setfill('-')<<a<<endl;//输出------1234
    cout<<setw(10)<<setfill('-')<<setiosflags(ios::left)<<a<<endl;//输出1234------
    cout<<setw(10)<<setfill('-')<<setiosflags(ios::right)<<a<<endl;//输出------1234
    return 0;
}
  • 22
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarkTop1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值