入“坑”C++系列之(二)从Hello World开始说起

基础知识【C++入门】 1、C++输入&输出 新生婴儿会以自己独特的方式向这个崭新的世界打招呼,C++刚出来后,也算是一个新事物, 那C++是否也应该向这个美好的世界来声问候呢?我们来看下C++是如何来实现问候的。 #include<iostream> using namespace std; int main() { cout<<"Hello world!!!"<<endl; return 0; } 说明: 使用cout标准输出(控制台)和cin标准输入(键盘) 时 阅读详情

前言

本文通过一个“简单”且经典的例程,对C++的一些基本语法进行简单的介绍,希望能够让大家对C++有一个初步的认识。当然,由于C++和C语言之间的特殊关系,本文也会涉及到一些C语言的知识,不过还是希望大家能够从C++的角度进行理解,毕竟我们正在入坑C++嘛。由于本人能力有限,本文难免有疏漏或错误之处,仍然希望读者不吝指正,谢谢!

程序源码

本文使用的程序源码如下:
程序1:

#include <iostream>
using namespace std;
int main()
{
  cout << "Hello World!" << endl;
  return 0;
}

程序结构分析

对于上述程序,对于学习过C语言的童鞋应该相当眼熟吧。程序开头的预编译指令#include ,目的是在程序的编译阶段,将iostream头文件中的内容载入程序,从而代替这行的头文件包含;接下来的编译指令using namespace std;,涉及到命名空间的知识,细节将在后面的文章中进行讲解;然后便是main函数了,也是程序中的主体部分,其中包含了许多细节性的知识,我们在下面的内容进行详细的说明。

预编译指令

预编译指令是C语言和C++共有的一种特性,通常以#开头,比如此处的#include 头文件包含指令,以后会使用到的#define 宏定义指令,以及#if…#elif…#endif 条件编译指令等,都属于预编译指令,他们都是在程序的编译阶段运行的。而此处使用头文件包含指令将iostream头文件包含进程序中,而iostream的中文名是输入输出流,由此可以看出,该头文件与输入输出函数是密切相关的,如果想要使用后面的cin和cout,那么便必须包含该头文件。

命名空间

本文对命名空间的知识进行一个简单的介绍,详细的内容将会在后面的专题文章中进行单独的介绍,读者此时只需要了解该语句的作用即可。
这里做个简单的比喻,我们试想一下。如果同一个学校的1班和2班都有一个叫小明的同学,当老师组织1班和2班的同学一起开班会时,老师需要小明同学回答一个问题,那么怎样才能准确的让老师想提问的小明进行回答呢?最简单的方法便是直接使用1班的小明或者2班的小明进行提问,这样便不会出现两个小明同时站起来的情况了。而命名空间的作用与此类似,也是为了避免同名的对象或者函数等产生冲突。
此处,如果我们不使用命名空间,那么程序会出错,报出如下错误:
在这里插入图片描述
当然,在C++中,我们也可以不使用上面的方法进行区分。除了上面的方法之外,我们还可以直接使用std::cin和std::cout使用来代替cin和cout指令,如下所示:
程序2

#include <iostream>
int main()
{
  std::cout << "Hello World!" << std::endl;
  return 0;
}

命名空间的不同表示形式

在实际应用中,命名空间的位置以及形式并非是固定的,我们可以根据需要,在不同的地方使用不同格式的命名空间。此处,我将命名空间与变量进行类比,提出命名空间的作用域这一概念(个人见解)。从而类比于变量的全局变量和局部变量。而命名空间的使用位置主要有下面四种情况:
1、如上述程序1所示,放在所有的函数定义之前,我们可以认为是一个全局性的命名空间,即当前文件中的所有函数均能使用命名空间std中的所有元素;
2、将命名空间放在特定的函数中,相当于其作用域是局部的,仅该函数能够使用命名空间中的内容,如下所示:
程序3:

#include <iostream>
void TestFunc()
{
  using namespace std;
  cout << "Hello Word!" << endl;
}
int main()
{
  TestFunc();//函数调用
  //cout << "cout test" << endl;//出错
  return 0;
}

我们仅在TestFunc函数中使用命名空间,那么main函数中便不能直接使用cout或者cin进行输入输出了。
3、使用使用using std::cout和using std::cin的形式代替using namespace std,同样可以使用cout和cin进行输入和输出。
4、不使用using namespace std的形式,而直接使用std::cout和std::cin,以及std::endl进行输入输出。

使用建议

一般而言,建议使用上述的第3和第4种方法使用命名空间。

main函数

main函数的结构

在C++和C语言中,所有的函数结构几乎都是一样的。主要由以下几部分构成

函数返回值的类型 函数名(函数形参1,,函数形参2...)

基于此,我们可以知道此处的main函数的返回值类型为int整型,函数名为main,没有函数形参。并且,函数一般分为被调函数和调用函数,即被调函数被其他函数进行调用,而main函数的不同之处在于,main函数是被操作系统的启动代码调用的,而不能被程序中的其他函数调用,且main函数是必须且唯一的。

main函数的返回值

按照标准规定,对于main函数的返回值。如果返回为零值,那么意味着程序正常运行,如果返回非零值,那么意味着程序中可能存在某些错误。在实际应用中,可以结合脚本对main函数的不同返回值进行不同的处理,从而实现不同的需求。

重头戏一之cout

cout是ostream类的一个对象,而ostream被称为输出流。
cout在iostream头文件中进行定义,位于std命名空间中。按照上面的程序,就是Hello Word!通过输出流流向cout对象,从而实现了在屏幕上的显示。
这里我们只需要知道,cout的作用就是打印输出信息,作用和C语言中的printf函数一样。至于类和对象的概念,将会在后续的文章中进行深入讲解,相信大家也会慢慢的有所理解。

重头戏二之<<运算符重载

在C语言中,我们知道**<<表示的是左移运算符**,那为什么在这里就成了插入运算符了呢?是因为**<<运算符使用了C++的一个重要特性,即运算符重载**,通过运算符重载,我们便可以使用同一个运算符,完成不同的功能。
而插入运算符的作用便是将其右侧的内容插入到输出流中,在流向上面的cout对象,实现信息的输出。
而在C语言中,也存在运算符重载,比如:&既可以作为取地址的运算符,也可以作为按位与的运算符。

重头戏三之endl

C++中的endl和C语言中的**\n类似,我们都可以简单将其人为认为是换行的作用。不同的是,endl被称为控制符**,而**\n被称为换行符**,是一种转义序列。当然,他们之间的区别远非名字不同。
与cout一样,endl也是在iostream头文件中定义的,且位于std命名空间中。并且,endl除了换行的作用之外,还会将缓冲区中的内容进行刷新,从而可以确保将需要打印的信息立即输出到屏幕上,实际上使用endl时,系统会自动调用fflush()函数,清空缓冲区。
而\n的作用则仅仅是换行,在C语言的IO编程章节,会涉及到缓冲IO和无缓冲IO两个概念。对于有缓冲的IO函数,可能只有当缓冲区被占满的时候,才会将数据进行输出(即使此处使用了\n换行符),而对于无缓冲的IO函数,只要遇到**\n**,便会将数据进行输出。

重头戏四之cin

cin是instream类的一个对象,而istream被称为输入流。同样,cin也在iostream头文件中进行定义,位于std命名空间中。
虽然上面的程序中并没有使用到cin,但是我们通过对cout的理解,可以想象出cin的语法大概是下面的亚子:

cin >> inputData;

没错,上面的程序,就是为了通过输入设备(此处指键盘),向变量 inputData 流入一个数据,从而将输入的值保存在变量inputData所对应的内存空间中。由此可知,C++中的cin对象的作用与C语言中的scanf函数是一样的。只是相比而言,更加简单。

重头戏五之>>运算符重载

与**<<插入运算符类似,此处的>>被称为抽取运算符**,即从输入流中抽取数据,载入指定的内存地址中。
**>>**同样使用了运算符重载的特性。

补充:处理实际输入与希望输入的数据类型不符的情况

问题现象

在平时的编程过程中,当我们利用cin获取键盘的输入时,需要提前声明一个数据类型,从而将键盘的输入保存至这个变量中,如下:

int inputData = 0;
cin >> inputData;
cout << "输入的数字为:" << inputData << endl;

但是,如果当我们输入的数据并非int类型时,编译器会如何处理呢?实际上,当发生类型不匹配的情况时,编译器会进行如下处理:
1、inputData的值保持不变,即仍然为初始值0;
2、不匹配的输入将被遗留在输入队列中;
3、设置cin对象的一个错误标志;
4、对cin方法的调用将返回false。

解决方法

当发生了上述的错误之后,我们可以按照下面的步骤,对其进行处理:
1、重置cin,从而接收新的输入;
2、删除错误输入;
3、提示用户再次输入正确的数据。
那么,我们如何在代码中实现呢?
首先,利用cin.clear()方法,可以重置输入。其次,利用cin.get()方法,重复读取输入队列中的数据,知道读取到换行符\n,此时则意味着已经读取到上次输入数据的结尾了,此时便实现了清除输入队列的目的。最后,再次提醒用户输入新的数据即可。代码示例如下:

while(1)//重复输入,直到正确输入数字
{
	int testData = 0;
	cout << "请输入一个数字:" << endl;
	if(!(cin >> testData))//如果输入的数据不是数字,则表示类型不匹配.cin方法将返回false
	{
		cin.clear();//重置cin
		while('\n' != cin.get());//将上次的错误输入全部读取出来,达到清空输入队列的目的
		cout << "请输入一个数字:" << endl;
		continue;//继续输入
		
	}
	else //输入的数据正确
	{
		cout << "输入的数据是:" << testData << endl;
		break;//跳出循环
	}
}

总结

本文通过一个简单的例子,对涉及到的一些C++基本特性,进行了介绍。但是,并没有对类、对象以及重载进行深入的描述,这部分内容将在后续的学习笔记中进行描述。

【c++编程】:【vs2019】编写第一个“Hello World !”程序 步骤一: Hello world! 这个程序,让系统的显示器输出一条“Hello World!”的语句。代表计算机对整个世界的招呼,或者是一个入门程序员对这个计算机世界的问候。 步骤二: 好。让我们开始吧。首先会像大家介绍这个小程序的编写过程。最后会分析代码的内容。 1.打开vs2019的软件左上角->文件->>新建->>项目 2.按照图中... 阅读详情

相关推荐

SGX|hello world!

hello world!示例Enclave.edlApp.cppEnclave.cpp实现test.edlApp.cpptset.cpp注意事项 示例 了解了SGX的相关基础,我们试着来编写一个打印“hello world!”的demo。 关于SGX的makefile的解读,参照https://blog.youkuaiyun.com/daichunkai123/article/details/78027895 接下来我们尝试编写属于我们的“hello world!”。 首先我们直接打开SDK中的示例程序: 其中APP

励志长大 1516

c++的HelloWorld编写及解释:#include iostream、using namespace std

#include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; return 0; } 解释: (1)#include iostream #include <iostream> 以#开头的语句称为预处理器指令; #include语句不是必须的,但是如果一旦程序中有该语句,就必须将它放在程序的开始处。 iostream是input

mantou_riji的博客 9416

C++ :输出 Hello, World

好了初级代码讲完了,接下来是高级代码(其实也不怎么高级),要想了解高级代码的语句的意思,请务必懂得自定义函数、递归、队列、结构体、字符串、ASCLL码。输出:Hello, World!是C++ 和很多编程语言的最简单、基本的程序。目前为止,cout 的用法已经讲完了(其实还有很多,只是这里用不到了)此代码可以输出一个数字 1 ,可是我们要输出的东西不是数字,怎么办?好了,Hello, World!此代码纯属原创,可以用来把人整懵。此代码可以输出一段乱七八糟的东西。现在,我们来写一下这个程序。......

小天狼星_布莱克 的博客 1万+

C++(1)

#include<iostream> using namespace std; int main(){ cout << "hello world"; return 0; } 上面是C++的第一个程序 分析: #include<iostream> (1)为预处理命令,其中 <> 中的为头文件(提供输入/输出的所需要的一些信息) //为命名空间 using namespace std; //可以通过#include"std",表示要用到命名空间std中内

qq_42447739的博客 1341

VSCode中使用CMake构建C++ “Hello World“ 教程

Visual Studio Code(简称VScode)是一款由微软开发的免费、开源且功能强大的代码编辑器。它支持跨平台使用,能够在Windows、macOS以及Linux操作系统上运行。VScode的界面布局简洁,用户可以自定义主题和快捷键,提高开发效率。其扩展市场十分丰富,涵盖从代码美化、版本控制到特定语言支持等多种功能,使得VScode能适应各种开发场景。在本章,我们将从VScode的安装开始,逐步探讨其核心功能和界面布局。

weixin_35671843的博客 1778

C++中的“Hello, World!”:多种输出方法的探索

本文还有配套的精品资源,点击获取 简介:本文将介绍在C++编程语言中输出“Hello, World!”的几种不同方式。首先,使用传统的 std::cout 进行基本输出,并解释其工作原理。然后,通过字符数组逐个输出,接着演示使用字符串拼接输出。最后,展示如何通过字符串操作来绘制简单的字符图案。这些示例不仅用于教学C++的输出功能,也展示了编程语言的灵活性和创造...

weixin_42590539的博客 4102

c++实现五子棋

思路:先用用system(“color 70”)改变控制台的背景色为灰白色,前景色为黑色,然后用“■”打印棋盘,然后用SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a)改变输出颜色分别为白色和黑色,用字符“●”打印黑棋和白棋。 整个棋盘用一个char类型的二维数组保存,空的地方用‘ ’标识,玩家一下棋的地方用‘x’标识,玩家二下棋...

liumanghu的博客 3611

在计算机屏幕上显示Hello World!

在计算机屏幕上显示Hello World!

c++的“Hello world!“输出

其中,"#include"为头文件,一种包含功能函数、数据接口声明的载体文件,"iosteam”为“输入输出流”。不管是学Java,还是Python,或是C,C++,Go......,第一个程序基本都是"输出Hello world!那么,就与小编来看一段使用C++语言写的"Hello world!cout为输出流,可输出多种数据,"Hello world!"为返回值,遇到它,程序就会终止。"int main(){}"为主函数,程序的入口。...

m0_67412992的博客 6739

新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注)

本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。

weixin_28716181的博客 472

告别Inspect!用微软官方推荐的Accessibility Insights搞定WinApp自动化测试元素定位

本文介绍了如何从传统的Inspect工具升级到微软官方推荐的Accessibility Insights for Windows,以提升Windows应用自动化测试中的元素定位效率。通过详细的功能对比、安装指南和实战技巧,帮助测试工程师掌握这款现代化工具的核心优势,包括实时元素检测、属性筛选和与WinAppDriver、Appium等测试框架的无缝集成。

weixin_26749245的博客 621

<C++>快来精通C++的“Hello world“写法

C++是啥,命名空间,输入输出

qq_47882731的博客 1万+

保姆级教程:在ROS Noetic下,手把手教你将自定义A*全局规划器打包成插件(附避坑指南)

本文提供了一份详细的ROS Noetic下自定义A*全局规划器插件开发指南,涵盖从环境准备、算法优化到插件配置与调试的全流程。通过实战案例和避坑技巧,帮助开发者高效实现机器人导航中的全局路径规划,特别适合需要优化ROS导航栈的开发者。

weixin_29168675的博客 285

C++零基础入门:趣味学信息学奥赛从“Hello World”开始

结合树莓派Pico开发板的实际操作,这篇文章将为C++零基础的学生和信息学奥赛爱好者讲解如何通过一个简单的“Hello World”项目,学会基础语法、编程思维,以及软硬件结合的实践方法。通过本项目,您不仅掌握了C++的基础知识,还初步体验了代码与硬件结合的乐趣。未来,您将能够用C++实现更复杂的项目,探索信息学奥赛的广阔天地。在本项目中,我们通过USB线连接Pico与电脑,编写并运行“Hello World”程序。通过编写C++代码,学生可以实现从“Hello World”到复杂传感器控制的过渡。

邓校长的编程课堂专栏 1641

HC-SR04测距不准?STM32F103定时器捕获模式详解与精度提升实战

本文详细解析了HC-SR04超声波测距模块在STM32F103上的精度问题,并提供了定时器输入捕获模式的实战配置方法。通过硬件级时间测量和温度补偿算法,将测距精度提升至±0.1cm,适用于工业级应用场景。文章包含完整的代码实现和测试对比数据,帮助开发者解决超声波测距不准的常见问题。

weixin_30313409的博客 351

IEC61850建模实战:从标准解读到ICD文件生成

本文详细介绍了IEC61850建模的实战过程,从标准解读到ICD文件生成,涵盖了变电站自动化系统的结构化数据模型设计。通过分层结构、标准服务映射和XML文件解析,帮助读者掌握电力系统智能电子设备的标准化建模方法,提升工程实施效率。

weixin_30823001的博客 415

第一个C++代码“hello world”

1、 编程软件市面上有许多例如:Clion、vs code、vs studio2022、DEVc++、sublime、Eclipse等等都可以用来进行平常的编程学习,每个IDE都具有自己的特点可以根据自己的习惯来选择适合自己的IDE,而本篇文章我采用的IDE是。项目名称尽量根据项目的具体内容来命名,起到见名知意的作用,不然以后找自己以前写的某些项目,就恐怕只有上帝知道其中是什么了,而我们只能一个一个打开才能找到了,写好项目名称之后点击右下角的创建就可以开始写代码了。一、打开编程软件(IDE)

2402_83836963的博客 1012

【系统移植】 移植主线U-Boot(v2024.01-rc3)到RK3399

[系统移植] 移植主线U-Boot(v2024.01-rc3)到RK3399

Systemcall名屋 1004

C++的Hello World

C++的Hello World C语言学得很仓促,就开始贸然接触C++,导致后面的内容不能够很好的掌握。现在决定放下一些东西,重新从头开始回顾C++。 我选择的编译器是C-free5.0,因为用的时间长了,也不愿意换了。 按照惯例,每个程序员学习一种新的语言,总是要写的第一个程序是Hello World! 以下是代码: #include using namespace std; int mai...

Lemon_Yark的博客 2068

【AI智能体】最强AI编程利器 Claude Code 从部署到项目实战详解

最强AI编程利器 Claude Code 从部署到项目实战详解

congge 4511

大模型_WIN10使用hyper-v安装Ubuntu24.04虚拟机_配置独立静态IP地址_连接外网_并与内网其他机器互通_通过容器安装Dify_超详细安装过程002--人工智能工作笔记0247

本文详细描述了在Hyper-V环境中配置网络、安装Ubuntu虚拟机、设置IP地址、安装Docker以及部署Dify应用的过程。首先,通过Hyper-V管理器创建外部虚拟交换机(ExternalSwitch),并配置本机、虚拟交换机和Ubuntu虚拟机的IP地址,确保网络互通。接着,在Ubuntu虚拟机中安装Open-VM-Tools和Docker,并配置Docker的国内镜像源。最后,通过Git克隆Dify源码,使用Docker Compose启动Dify应用,完成部署。整个过程涵盖了网络配置、虚拟机管理

添柴程序猿的专栏 1751

Dev C++ 实现Hello World

新建源文件 打开 Dev C++,在上方菜单栏中选择“文件 --> 新建 --> 源代码”: 或者按下Ctrl+N组合键,都会新建一个空白的源文件,如下图所示: 在空白文件中输入本文开头的代码 注意 *表示源文件没有保存 在上方菜单栏中选择“文件 --> 保存”,或者按下Ctrl+S组合键,都可以保存源文件。 注意 将源文件后缀改为.c。 提示:C++是在C语言的基础上进...

weixin_45743799的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

从“Hello World“ 开始 C++

本文介绍了C++编程语言的基础入门知识,从经典的"Hello World"程序开始讲解。文章对比了C++与C语言在头文件、命名空间、输入输出等方面的差异,详细解析了iostream、using namespace、cout和cin.get()等关键概念。同时涵盖了C++中的注释、变量声明、常量定义(宏常量和const修饰)等基础语法,并说明了关键字的定义和使用规则,以及标识符的命名规范。通过简明扼要的代码示例和对比分析,为初学者提供了清晰的C++入门指导。

m0_55384532的博客 722

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【Hello World 】

几乎每一个程序员都是从Hello World!开始自己的程序人生,作为一个初学编程的小朋友,也需要先编程来输出Hello World!。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 8693

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

向C++世界招手——了解如何使用IDE并编写“Hello world!”

前言顺序结构及相关程序编写第一份程序——了解如何使用IDE并编写“Hello world!可变与不可变的容器——变量与常量的定义和使用学习C++是一件需要持之以恒的事。千里之行,始于足下。从今天开始,就让大家跟随我的脚步,向着“精通C++”进发吧!本帖仅针对需要参加信息学奥赛的学生需要而创作,内容紧贴信息学奥赛大纲,所以内容上不会和纯语法讲解的那么详细,仅会把比赛所需要考的C++语法基础部分内容进行梳理。我还没开始写O!!!

Pantheraonca的博客 1215

【信奥赛·计算机基础】CSP-J 你的第一个C++程序,用Hello World 打开 C++ 的大门

在程序员的世界里,有一个至理名言,不管你学哪个语言,你的第一个程序。一定是输出Hello World,咱们学 C++ 也不例外,通过 Hello World 我们能快速的感受这个语言的结构,以及如何编译、如何运行,学会了这些,再学其他的内容,就非常的简单了。

大事龙 881
上一篇: 入“坑”C++系列之(一) C++的前世今生
下一篇: SDIO协议读写SD卡之数据传输模式介绍
「已注销」
博客等级 码龄7年 49粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值