Śmieci na końcu tablicy char

0

Witam, mam pewien problem, mam napisany program w C++ jako zadanie na studiach. Program wczytuje z pliku txt znaki do tablicy char i wypisuje na konsoli terminala tą tablicę ze znakami w odwrotnej kolejności z warunkiem, że cyfry należy zamienić 0 na 9, 1 na 8 i tak dalej. Na wejściu jest pliku txt i liczba znaków w tym pliku.
Przykładowe działanie: digits.exe 10 input.txt
input: a0b1c2d3e4
output: 5e6d7c8b9a

Program mam już napisany i problem rozwiązuje, ale martwi mnie log z terminala po uruchomieniu. Wynik się zgadza, ale po ostatnim znaku dobry kawałek w dół terminala jest dużo śmieci, które nie wiem z czego wynikają. Dopiero zaczynam przygodę z programowaniem. Mógłby ktoś zerknąć na kod i wytłumaczyć mi w czym jest problem i jak go naprawić?



        #include <iostream>
        #include <cstdlib>
        #include <fstream>
         
        int main(int argc, char *argv[]) {
         
            int n = atoi(argv[1]);
            std::ifstream input_file(argv[2]);
         
            char *T = (char*)std::malloc(n * sizeof(char));
         
            if (input_file.is_open()) {
                    input_file.getline(T, n + 1); }
         
            for (int i = 0; i < n ; i++) {
                std::cout << T[i]; }
         
            // std::cout << std::endl;
         
            // std::cout << static_cast<int>(T[50]);
         
            std::cout << std::endl;
         
            for (int i = n - 1; i <= n - 1; i--) {
                int number_sign;
                number_sign = static_cast<int>(T[i]);
                    for (int k = '0'; k <= '9'; ++k) {
                        if (number_sign == k) {
                            if (number_sign >= '0' && number_sign <= '9') {
                                    T[i] = static_cast<char>('9' - (number_sign - '0')); }}
                            } std::cout << T[i]; }
         
            input_file.close();
            free(T);
        }
1

Próbuję w tym kodzie odgadnąć intencję autora, i mi nie idzie.

Dziwne czytanie getline o dwa znaki więcej niż przygotowane
castowane do int ... chciałeś konwersję? To nie jest konwersja.
najdziwniejsze alokowanie w C++ jakie widziałem itd...
pętla w dół, której się dziwię, ze działa (jest niemal nieskończona, zobacz warunek)
itd

0

Ehh
char T = (char)std::malloc(n * sizeof(char));
Po co? Po prostu napisz char tablica[n]; chociaż to i tak lipa bo to VLA i to rozszerzenie nie standard.
Ale po co char i jakieś rzutowania z kosmosu? Pomyśl nad tym

    std::fstream file(filePath, std::ios_base::in);
    std::vector<int> v;
    int a;
    while (file >> a)
    {
        v.push_back(a);
    }
//Po tem zamień to kolejnością.

Za dużo jakiejś kombinatoryki.

1

W 24 linii , powinno chyba być, int i = n - 1; i >= coś; i--.

2

OP utracił zainteresowanie, nie strzelajcie

0

Faktycznie, "wyłączył się", amen :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1