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等类型取地址则会报错