В C ++ не выводятся значения массива cout - PullRequest
2 голосов
/ 04 апреля 2020

У меня есть этот кусок кода, с которым я хочу написать элементы массива. Однако на стандартном выводе ничего не пишется. Когда я пытаюсь вернуть значение в массиве, все в порядке, и для l oop тоже не проблема. Есть идеи?

#include <iostream>
using namespace std;
int write(unsigned char* a, int n) {

    for (int i=0; i<n; i++) {
        std::cout << a[i] << '\n';
    }
    return -1;
}

int main() {
    int n;
    std::cin >> n;
    unsigned char* a = new unsigned char[n];
    for (int i=0; i<n; i++) {
        int x;
        std::cin >> x;
        a[i] = (unsigned char)x; 
    }

    std::cout << write(a,n) << '\n';
    delete[] a;
    return 0;
}

Ответы [ 2 ]

3 голосов
/ 04 апреля 2020

Какие целые значения вы вводите? Я предполагаю, что они очень низкие (≤32). Когда вы записываете значение (unsigned) char в форматированный выходной поток, записывается символьное значение , а не число c. (И в большинстве современных систем низкие символьные значения соответствуют непечатаемым символам, поэтому вы не обязательно будете видеть какие-либо выходные данные.)

Если вы хотите написать числа, вам нужно изменить код на

for (int i = 0; i < n; i++) {
    std::cout << static_cast<int>(a[i]) << '\n';
}

Или:

std::copy_n(a, n, std::ostream_iterator<int>(std::cout, "\n");
1 голос
/ 04 апреля 2020

Я попробовал приведенный ниже ввод, и он работает.

3 ab c

Единственное требуемое изменение - это изменение int на char, когда вы работаете с char.

    for (int i=0; i<n; i++) {
        char x; //changed this line
        std::cin >> x;
        a[i] = (unsigned char)x; 
    }
...