上一节我们写了第一个 C++ 程序,学会了编译和运行。这一节来学习编程中最基础的概念------变量和数据类型,以及怎么从键盘读取用户输入、怎么把结果显示到屏幕上。
1. 变量是什么
变量就是一个「盒子」,用来存放数据。每个盒子有一个名字(变量名)和一个类型(决定能放什么数据)。
在 C++ 里,使用变量之前必须先声明它的类型。这叫「强类型」------你不能把文字塞进一个专门放数字的盒子里。
cpp
int age = 20; // 声明一个整数变量 age,值为 20
double height = 1.75; // 声明一个浮点数变量 height
char grade = 'A'; // 声明一个字符变量 grade
string name = "小明"; // 声明一个字符串变量 name(需要 #include <string>)
变量命名规则:
- 只能包含字母、数字和下划线
_ - 不能以数字开头(
1age是错的,age1是对的) - 不能使用 C++ 关键字(比如
int、return、if) - 区分大小写(
Age和age是两个不同的变量)
2. 基本数据类型
C++ 提供了几种常用的内置数据类型:
2.1 整数类型
cpp
int a = 42; // 最常用的整数类型,通常占 4 字节
long long b = 1e18; // 超大整数,占 8 字节
short c = 100; // 短整数,占 2 字节
unsigned int d = 10; // 无符号整数,只能存非负数
int 的范围大约是 -21 亿到 21 亿,日常使用足够了。如果数字特别大,用 long long。
2.2 浮点类型(小数)
cpp
float x = 3.14f; // 单精度,占 4 字节,精度约 6~7 位
double y = 3.14159; // 双精度,占 8 字节,精度约 15 位
一般用 double 就行,精度更高。float 在需要节省内存的场景(比如图形处理)才用。
2.3 字符类型
cpp
char ch = 'A'; // 单个字符,占 1 字节
注意字符用单引号 包裹,字符串用双引号。
2.4 布尔类型
cpp
bool isStudent = true; // 只有两个值:true 或 false
bool isAdult = false;
布尔类型在条件判断中非常常用。
3. 输出:用 cout 打印信息
cout 是 C++ 标准库提供的输出工具,配合 << 运算符把数据显示到屏幕上。
cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
int age = 20;
string name = "小明";
double score = 95.5;
// 输出变量
cout << "姓名:" << name << endl;
cout << "年龄:" << age << endl;
cout << "成绩:" << score << endl;
// endl 表示换行并刷新输出
// 也可以用 "\n" 来换行
cout << "Hello\n";
return 0;
}
编译运行后输出:
姓名:小明
年龄:20
成绩:95.5
Hello
<< 可以连续使用,把多个内容拼在一起输出。endl 和 \n 的区别是 endl 会强制刷新缓冲区,一般用 \n 就够了。
4. 输入:用 cin 读取用户数据
cin 配合 >> 运算符,可以从键盘读取用户输入:
cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
int age;
cout << "请输入你的姓名:";
cin >> name;
cout << "请输入你的年龄:";
cin >> age;
cout << "你好," << name << "!你今年 " << age << " 岁。" << endl;
return 0;
}
运行后程序会等你输入,输入完按回车继续。
注意: cin >> 读字符串时遇到空格会停止。比如输入 Zhang San,name 只会拿到 Zhang。如果需要读取带空格的整行内容,用 getline:
cpp
string fullName;
cout << "请输入你的全名:";
getline(cin, fullName); // 可以读取包含空格的整行
5. 类型转换
有时候需要在不同类型之间转换:
cpp
// 隐式转换(自动)
int a = 3;
double b = a; // int 转 double,b = 3.0
// 显式转换(手动)
double pi = 3.14;
int n = (int)pi; // n = 3,小数部分被截断
// 更安全的 C++ 风格转换
int m = static_cast<int>(pi); // 效果一样,更推荐
从 int 转 double 没有精度损失,反过来会丢失小数部分。
6. 一个完整的小例子
写一个简单的「自我介绍」程序,综合运用上面的知识:
cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string name;
int age;
double height;
char grade;
cout << "=== 自我介绍 ===" << endl;
cout << "请输入姓名:";
getline(cin, name);
cout << "请输入年龄:";
cin >> age;
cout << "请输入身高(米):";
cin >> height;
cout << "请输入成绩等级(A/B/C/D):";
cin >> grade;
cout << "\n--- 你的信息 ---" << endl;
cout << "姓名:" << name << endl;
cout << "年龄:" << age << " 岁" << endl;
cout << "身高:" << height << " 米" << endl;
cout << "等级:" << grade << endl;
return 0;
}
7. 常见错误
忘记包含头文件 :用了 string 但没写 #include <string>,编译器会报错。
变量未初始化就使用:
cpp
int x;
cout << x; // 未定义行为,输出一个随机值
养成声明变量时就赋初值的习惯。
类型不匹配:
cpp
int a;
cin >> a;
// 用户输入 "hello",cin 会进入错误状态,后续输入全部失效
后面会学到输入验证的方法,初学阶段先确保输入正确的数据类型。
8. 小结
这一节我们学了:
- 变量是存放数据的「盒子」,使用前要声明类型
- 常用数据类型:
int(整数)、double(小数)、char(字符)、string(字符串)、bool(布尔) cout <<用于输出,cin >>用于输入getline(cin, str)可以读取带空格的整行输入
下一节我们将学习条件判断(if / switch),让程序能根据不同情况做出不同的反应。