Nasıl dosya dizeleri ve tamsayılar vardır den tam sayılar alabilir ve C ++ diziye saklamak için?

oy
0

Ben de dizeleri vardır dosyadan tamsayılar elde ve bunların üzerinde bazı işlemler yapmak diziye saklamak istiyor. tam sayı 1 ya da 12 ya da 234, yani 3 basamak olabilir. Bunu yapmaya çalışıyorum ama kodu çalıştırdığınızda çıkış durur

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;
            }

}
Oluştur 10/10/2019 saat 01:02
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
0

Sen bulunan sayının rakamlarının sayısı ile uğraşmak zorunda:

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++;
}

Eğer tanımlanmamış bir boyut numarasını okumak istiyorsanız, o zaman yeni (c ++) ya da malloc (c / c ++) ile numers her hanesini biçimlendirmek için bellek ayırmak zorunda kalacak.

Cevap 10/10/2019 saat 05:06
kaynak kullanıcı

oy
0

Sen eklemek için ilk gerekecektir get()dosyanın sonuna ulaşmak için de döngü içinde işlevsellik.

Bir zamanlar bir süre döngü eklemeyi deneyin Forthmore charsonraki karaktere soran devam etmek bir tamsayı olduğu bulunmuştur.

Örneğin

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
Cevap 10/10/2019 saat 02:29
kaynak kullanıcı

oy
0

İlk gözlem: Eğer dizi sınırlarının dışına yineleme:

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

20 elemanları ve 21, yineleme. Yani tanımlanmamış bir davranış, yani (programınız burada alırsa) burada her şey mümkündür.

Daha sonra, dosyadan bir kez okumak ve ifade çünkü o zaman sonsuz döngü var !file1.eof()doğru veya program akışı geri kalanı için yanlış olarak belirlenir. Mı değil "çıkış durur" nedeni bu mu?

Üçüncü bulgu: En ififadeleri nedeniyle deyiminden sonra noktalı virgül işe yaramaz:

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

Sadece atamak digits[n]=contents;herhangi çeki olmayan.

Ben işlevinde yakmak için kaynak gösterilmeden herhangi bir neden göremiyorum ne. Neden yerel bir değişken yapmamaya?

Cevap 10/10/2019 saat 01:31
kaynak kullanıcı

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