如何在数组中返回负字符?
How can I return a negative char in an array?
我正在为学校做一个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)
并在控制台中键入123
,c
最终将包含char
'1'
,而不是数字1
或数字123
或类似的东西。 如果你把它转换成int
,你最终会得到int
49
,因为'1'
是ASCII码位49
。
从控制台读取整数的正确方法是使用>>
运算符:
int i;
std::cin >> i;
使用>>
运算符,如果在控制台中键入123
,i
最终将得到值123
.
默认情况下,char
通常是signed char
(取决于您的编译器(,因此它当然可以保存负数 - 从-128到+127。
但是没有"负字符",因此当您尝试打印它时,它将被解释为unsigned char
,范围从 0 到 255。根据您的字符集,与>128 相关的字符看起来像您描述的"有趣图片"。
要查看负值,您需要使用int
,它将打印为数字 - 例如-127
。
相关文章:
- 为什么 Serial.println(<char[]>);返回随机字符?
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 在函数中返回无符号字符数组,但不返回指针
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- std::stringstream 返回字符 *
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 为什么我的字符* 复印机返回不同的东西?
- strcmp 对于相等的字符序列返回 false
- 如何在数组中返回负字符?
- 为什么当作为常量字符* 返回时会在此处创建临时字符串?[斯特劳斯特鲁普的书例]
- isalpha() 函数为字符串中的字符返回 false
- 使用 const 指针的 C 样式字符返回不正确的结果
- 字符返回函数指针C++
- 'isprint' 为 Solaris 上的不可打印字符返回 true
- 常量字符* 返回类型
- C++字符返回输出符号
- 无符号字符返回值和+=出现问题
- _带有_O_U8TEXT标志的wsopen_s,向缓冲区、中间字符和4个中间俄语字符返回0.VS2010
- 将常量字符* 返回到字符*,然后更改数据