C++读文件的三种方式,以及什么时候该用哪种
一个C++开发者对ifstream、fstream和C风格文件读取的实用梳理,附带选型上的真实考量。
支持通配符SSL证书、多域名证书、IP证书。适配ACME接口, 支持Zerossl、Let's Encrypt和Google等渠道。登录已有账号
2026-06-13 14:15:41 C++ 循环 控制台输出 新手练习
学C++的时候,总会遇到那种在控制台上画图形的练习。
画个三角形、菱形什么的,带边框的长方形算是里面比较基础的一个。正好最近有人问起这个,我把当时的代码翻出来整理了一下。
需求不复杂:输入两个整数m和n,都大于2,然后输出m行n列的空心矩形,边框用*,中间全是空格。
这玩意本质上就是拆成三块来处理——顶部一行、中间m-2行、底部一行。直接看代码会更清楚。
#include <iostream>
using namespace std;
int main() {
int m, n;
cout << "请输入行数m(m>2): ";
cin >> m;
cout << "请输入列数n(n>2): ";
cin >> n;
// 输出上边框
for (int i = 0; i < n; i++) {
cout << "*";
}
cout << endl;
// 输出中间行
for (int i = 1; i < m - 1; i++) {
cout << "*";
for (int j = 1; j < n - 1; j++) {
cout << " ";
}
cout << "*" << endl;
}
// 输出下边框
for (int i = 0; i < n; i++) {
cout << "*";
}
cout << endl;
return 0;
}
顶部边框就是一个简单的循环,连续打印n个星号,然后换行。底部边框完全一样。中间部分稍微绕一点:外层循环从1跑到m-2,也就是跳过第一行和最后一行,每一行先输出一个星号,接着用内层循环输出n-2个空格,最后再补一个星号换行。
这样边框就连贯起来了。
这里其实容易踩坑的地方是循环的起止条件。如果写成i < m,那中间行就会多打两行,和上下边框叠在一起。我当时刚学的时候就没注意,屏幕上糊成一片。另外m和n必须大于2的约束代码里没有做校验,这例子里假设了用户会按要求输入。
实际写东西的时候加个判断会更稳,但作为演示代码就先保持简洁了。
跑一下,比如输入m=4,n=6,输出长这样:
******
* *
* *
******
看起来没什么特别,但把循环拆成三段这种思路在很多地方都能用上。
后面遇到更复杂的图形,本质上也是类似的分块处理,只不过边界条件的计算会麻烦一点。
这程序用到的也就是循环、条件判断、标准输入输出那点东西,但对刚入门的人来说,把这些组合起来不出错,其实已经算迈过一个不大不小的坎了。
一个C++开发者对ifstream、fstream和C风格文件读取的实用梳理,附带选型上的真实考量。
从越界导致的未定义行为聊起,理清NULL误用,整理at()、边界检查等安全写法,以及几个能让程序稳一点的小优化。
本文深入探讨在C++中如何高效合并两个`vector
C++ `vector`越界访问是导致程序崩溃和数据损坏的常见陷阱。本文将深入剖析其未定义行为的原理,辨析`NULL`与`nullptr`的易混淆点,并提供一系列安全访问策略,如边界检查、`at()`方法应用及避免错误的指针比较,助您编写健壮、高效的C++代码。