如何在数组中返回负数char?

时间:2018-09-21 23:55:09

标签: c++

我正在为一个学校的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++;
                }

    }

2 个答案:

答案 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