C++ cout 与cin的用法

C++语言是继承C语言的基础上形成的一门面向对象的语言,本文章将用C语言的输入(scanf)与输出(printf) 对比着C++的输入(cin)与 输出(cout)学习。

头文件

#include <iostream>  //是C++的标准输入输出头文件

#include <cstdio> //C++库中的C语言标准输入输出头文件,相当于#include<stdio.h>

命名空间

命名空间是一种在计算机科学中用来区分变量、函数、类等标识符名称的方法。它可以防止不同部分的代码之间的命名冲突,使得代码更加模块化和可维护。通过使用命名空间,可以避免全局命名空间污染、命名冲突和命名歧义等问题,同时提高代码的可读性和可维护性。

命名空间通过为标识符添加前缀或将其组织在特定结构中来实现。

写法:略

首先C++的输出语句cout的普通用法

int a =4;

cout<<a<<endl //endl表示”\n“,相当于C语言的printf("%d\n",a);

#include <iostream>
#include <cstdio> //相当于#include<stdio.h>

using namespace std; // 声明命名空间

int main()
{
    int a = 10;
    float b = 2.34;
    char c[10] = "启明";
    char d = 'g';
    unsigned short  e = 56;

    // C语言的输出
    printf("%d\n", a);
    printf("%f\n", b);
    printf("%s\n", c);
    printf("%c\n", d);
    printf("%u\n", e);

    //c++的输出方式
    
    cout<<"以下是C++的输出方式"<<"\n";
    cout<<a<<endl;// 其中endl表示"\n",等价于cout<<a<<"\n";
    cout<<b<<endl;
    cout<<c<<endl;
    cout<<d<<endl;
    cout<<e<<endl;
    
    //联合输出
    cout<<"C++联合输出方式"<<endl;
    cout<<"a="<<a<<"  "<<"b="<<b<<"  "<<"c="<<c<<"  "<<"d="<<d<<"  "<<"e="<<e<<endl;
    
}

运行结果

 

在上面的对比我们可以看出C语言的的输出方式需要%来指定格式的,但是C++中是不要的指定的。而且它的输出格式是cout<<"输出的内容" , 的格式,C语言是printf("%格式",输出的内容);

注意 :因为cout不指定输出的格式就导致了它输出char *类型时输出的是该地址的字符串。

#include <iostream>
#include <cstdio> //相当于#include<stdio.h>

using namespace std; // 声明命名空间

int main()
{
    int a = 10;
    float b = 2.34;
    char c[10] = "启明";
    char d = 'g';
    unsigned short  e = 56;



    // C语言的地址输出
    printf("%p\n", &a);
    printf("%p\n", &b);
    printf("%p\n", c);
    printf("%p\n", &d);
    printf("%p\n", &e);

    cout<<"以下是C++的地址输出方式"<<"\n";
    // C++的地址输出
    cout<<&a<<endl;
    cout<<&b<<endl;
    cout<<c<<endl;
    cout<<&d<<endl;
    cout<<&e<<endl;
}

运行结果

上面C语言输出地址是正常的,但是C++时输出c,d时就异常了。原因是他输出c地址的字符串,输出d地址的字符串,但是d是个字符它会在d的地址一直往后输出知道输出\0,所以字符g后的内容是不能确定的。

若想cout正常输出char *型的地址,则要cout<<(int *)c<<endl;给他指定一个非char * 的类型转换下就行了。

注意

count<<(char *)c<<endl与输出cout<<&c<<endl的地址是一样的,前者c+1表示下一个元素位置,&c+1表示数组末尾+1。

cin的用法

C语言中给变量赋值通常使用scanf,需要指定格式以及取变量的地址,而C++中只需要指定变量名即可无须取地址。

类如:int a;

scanf("%d",&a);

cin>>a;

#include<iostream>
#include<cstdio>

using namespace std;

int main()
{
    int a;
    float b;
    char c;
    char d[20];
    int e[5];

    //C语言的输入
    // scanf("%d", &a);
    // scanf("%f", &b);
    // scanf("%c", &c);
    // scanf("%s", &d);
    // printf("a=%d\n", a);

    //对于int float char *的类型不能用&否则报错
    // cin>>a;
    // cin>>b;
    // cin>>d;
    // cout<<"a="<<a<<endl;

    //char 类型中&c与c的区别
    cin>>c; //把键盘输入的单个字符(如果你输入的是字符串,只会保留第一个字符)存放到c里面
    cout<<"c="<<c<<endl;
    cout<<"&c="<<&c<<endl;

    cin>>&c; //把盘输入的字符事(如果你输入的是字符串,会把该字符串从&C的位置开始往后保存,会有风险)存放到&C
    cout<<"c="<<c<<endl;
    cout<<"&c="<<&c<<endl;


    //给int *数组赋值
    // for (int i = 0; i < 5; i++)
    // {
    //     cin>>e[i];
    // }
    // for (int i = 0; i < 5; i++)
    // {
    //     cout<<i<<"="<<e[i]<<endl;
    // }
    

}

运行结果

上述cin<<c与cin<<&c中前者只保存第一个从键盘输入的数,后者将字符串存放在c的内存地址上会内存越界。若其他的类型如int  char * float等类型取地址则会报错

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值