我正在为一个学校的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++;
}
}
答案 0 :(得分:1)
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
。
答案 1 :(得分:-1)
a char
通常默认情况下是signed char
(取决于您的编译器),因此它当然可以容纳负数-从-128到+127。
虽然没有“负字符”,所以当您尝试打印它时,它将被解释为unsigned char
,范围从0到255。根据您的字符集,与>关联的字符128张看起来像您描述的“有趣的图片”。
要查看负值,您需要使用int
,它将以数字形式显示-例如-127
。