如何在数组中返回负字符?

How can I return a negative char in an array?

本文关键字:字符 返回 数组      更新时间:2023-10-16

我正在为学校做一个C++项目,我正在尝试将文本文件中的矩阵写入数组。源数据中有负数和两个 5x5 矩阵。我不断得到不同的字符(╧ 或 =(而不是负数:

void main()
{
char c;
char nbRow , nbCol;
int location = 0;
int MatrixArray[10][10];
int negNbr;
int k = 0;
int l = 0;
cin.get(c);
nbRow = c;
cout << "Number of rows: " << nbRow << endl;
cin.get(c);
cin.get(c);
nbCol = c;
cout << "Number of columns: " << nbCol << endl;
while (!cin.eof())
{
cin.get(c);
//cout << (int)c << endl;
if (!isblank(c) && (isdigit(c) || c == 45))
{
cout << c << " | test1 " << " | ";
if (c == 45)
{
cin.get(c);
negNbr = (char)c;
negNbr = negNbr * -1;
cout << (char)negNbr;
MatrixArray[k][l] = (char)negNbr;// *-1;
}
else //if (isdigit(c))
{
MatrixArray[k][l] = (char)c;
}
cout << " |test2 " << k << l << "| " << (char)MatrixArray[k][l] << endl;
if (l == 4)
{
k++;
l = 0;
}
else l++;
}
}

cin.get读取单个输入字符。 如果您调用cin.get(c)并在控制台中键入123c最终将包含char'1',而不是数字1或数字123或类似的东西。 如果你把它转换成int,你最终会得到int49,因为'1'是ASCII码位49

从控制台读取整数的正确方法是使用>>运算符:

int i;
std::cin >> i;

使用>>运算符,如果在控制台中键入123i最终将得到值123.

默认情况下,char通常是signed char(取决于您的编译器(,因此它当然可以保存负数 - 从-128到+127。

但是没有"负字符",因此当您尝试打印它时,它将被解释为unsigned char,范围从 0 到 255。根据您的字符集,与>128 相关的字符看起来像您描述的"有趣图片"。

要查看负值,您需要使用int,它将打印为数字 - 例如-127