Jak uzyskać całych liczb całkowitych ze plik ma ciągów i liczb całkowitych i przechowywać je w tablicy w C ++?

głosy
0

Chcę uzyskać całkowite z pliku, który ma za sznurki i przechowywać je do tablicy, aby zrobić kilka operacji na nich. liczby całkowite może być 1 lub 12 lub 234, więc 3 cyfry. Staram się zrobić, ale wyjście przestaje kiedy uruchomić kod

void GetNumFromFile (ifstream &file1, char & contents)
{
    int digits[20];
    file1.get(contents);
    while(!file1.eof())
    {
        for (int n = 0; n < 10; n++)
        {
        if(('0' <= contents && contents <= '9') && ('0' >= contents+1 && contents+1 > '9'));
            digits[n]=contents;
        if(('0' <= contents && contents <= '9') && ('0' <= contents+1 && contents+1 < '9'));
            digits[n]=contents;
        if(('0' <= contents && contents <= '9')&&('0' <= contents+1 && contents+1 <= '9')
         && ('0' <= contents+2 && contents+2 < '9'));
            digits[n]=contents;
        }
        continue;
    }
        for (int i = 0; i <= 20; i++)
            {
            cout << *(digits + i) << endl;
            }

}
Utwórz 10/10/2019 o 01:02
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
0

Masz do czynienia z liczbą cyfr numeru znalezionego:

int digits[20];
int i = 0;
short int aux[3]; // to format each digit of the numbers

ifstream file1("filepath");
char contents;

file1.get(contents); //first char

while (!file1.eof())
{
    if (contents <= '9' && contents >= '0' && i < 20) // if character is in number range
    {
        aux[0] = contents - '0'; // converting the char to the right integer
        file1.get(contents);

        if ((contents <= '9' && contents >= '0' && i < 20) && !file1.eof()) // if is integer and has mor char to read, continue on
        {
            aux[1] = contents - '0';
            file1.get(contents);
            if ((contents <= '9' && contents >= '0' && i < 20) && !file1.eof()) // if is integer and has mor char to read, continue on
            {
                aux[2] = contents - '0';
                file1.get(contents);
                aux[0] *= 100; // define houndred
                aux[1] *= 10; // define ten
                digits[i++] = aux[0] + aux[1] + aux[2];

            }
            else
            {
                aux[0] *= 10; // define ten
                digits[i++] = aux[0] + aux[1];
            }
        }
        else
        {
            digits[i++] = aux[0];
        }
    }
    i++;
}

Jeśli chcesz przeczytać nieokreśloną liczbę rozmiarze, a następnie trzeba będzie przydzielić pamięci sformatować każdą cyfrą numers z nowego (C ++) lub malloc (C / C ++).

Odpowiedział 10/10/2019 o 05:06
źródło użytkownik

głosy
0

Trzeba będzie najpierw dodać get()funkcjonalność wewnątrz pętli, jak również w celu osiągnięcia końca pliku.

Forthmore próby dodania pętli while raz charokazało się być liczbą całkowitą, aby kontynuować, prosząc o następnego znaku.

na przykład

int digits[20];
int i = 0;
ifstream file1("filepath");
char contents;
while (!file1.eof())
{
    file1.get(contents); // get the next character

    if (contents <= '9' && contents >= '0' && i < 20) // if character is in number range
    {
        digits[i++] = contents - '0'; // converting the chat to the right integer
        file1.get(contents);

        while (contents <= '9' && contents >= '0' && i < 20) // while is integer continue on
        {
            digits[i++] = contents - '0';
            file1.get(contents);
        }
    }
}

// do other stuff here
Odpowiedział 10/10/2019 o 02:29
źródło użytkownik

głosy
0

Pierwsza obserwacja: iteracyjne poza granice tablicy:

int digits[20];
for (int i = 0; i <= 20; i++)

Elementy 20 i 21 iteracji. To jest niezdefiniowane zachowanie, więc wszystko jest tu możliwe (jeśli program ostatecznie trafia tutaj).

Następnie należy odczytać z pliku raz, a potem masz nieskończoną pętlę ponieważ wyrażenie !file1.eof()jest prawdziwe lub fałszywe dla pozostałej części przebiegu programu. Czy nie jest to powód do „przystanki wyjścia”?

Trzecie stwierdzenie: twoje ifwypowiedzi są bezużyteczne ze względu na średnik po stwierdzeniu:

if(('0' <= contents && contents <= '9') && ('0' >= contents+1 && contents+1 > '9'));
            digits[n]=contents;

Wystarczy przypisać digits[n]=contents;bez jakiejkolwiek kontroli.

Ja nie widzę żadnego powodu dostarczania odniesienie do char w funkcji. Dlaczego nie zrobić to zmienna lokalna?

Odpowiedział 10/10/2019 o 01:31
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more