[踩坑] 诡异的 Unicode 负号

引入

这一天我正在写计算方法作业,要读入数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void input_matrix(Mat &M) {
std::vector<double> nums;
double num;
while (std::cin >> num) {
nums.push_back(num);
}
int n = static_cast<int>(std::sqrt(nums.size()));
M.resize(n, Vec(n, 0.0));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
M[i][j] = nums[i * n + j];
}
}
}

然后接了个 freopen 来读文件,文件是这样的:

1
2
3
4
4 −1 1 3
16 −2 −2 5
16 −3 −1 7
6 −4 2 9

数据是我从 PDF 直接复制过来的,看上去十分正常,但是读入的时候发现停不下来?!

分析

仔细看这两个符号:

1
2

-

因字体而异,还是能看出来一点区别的。上面这个是 Unicode 负号,而下面这个是普通的 ASCII 减号。

cin 读到这个符号的时候,由于没法读入后面 double 类型的 num,所以会失败,而这个字符还是留在了流里,于是一次次读这个字符,就卡住了。

解决

换成-就好了,下次还是不能偷懒啊……


[踩坑] 诡异的 Unicode 负号
http://xiao-h.com/2025/10/19/踩坑-诡异的Unicode负号/
作者
小H
发布于
2025年10月19日
许可协议