Как l oop через целые числа из заданного txt файла и найти второе по величине число в c? - PullRequest
0 голосов
/ 17 июня 2020

Я предоставил txt-файл, содержащий штрих-коды продукта. Мне нужно найти, какой штрих-код является вторым по величине среди штрих-кодов, и сказать, сколько раз он появлялся в файле.

например:

1 2 3 4 5 6 7 8 9 5 0 6 
1 2 3 4 5 6 7 8 9 5 0 6
1 2 3 4 5 6 7 8 9 5 0 6 
1 2 3 4 5 6 7 8 9 5 0 6
1 2 3 4 5 6 7 8 9 5 0 7
1 2 3 4 5 6 7 8 9 5 0 7 
1 2 3 4 5 6 7 8 9 5 0 7
1 2 3 4 5 6 7 8 9 5 0 8

[Мне нужно искать из большого текстового файла, содержащего более 100 штрих-кодов]

мой результат должен быть

Второй по величине штрих-код по количеству: 1 2 3 4 5 6 7 8 9 5 0 7

Оно появлялось 3 раза.

Я уже делал:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int one  ,two, three, four, five, six, seven, eight, nine, ten, ele, twel;
    int one2  ,two2, three2, four2, five2, six2, seven2, eight2, nine2, ten2, ele2, twel2;

    char temp[256], name[30];

    FILE *in;
    if((in = fopen("bar.txt", "r")) == NULL)
    {
        printf("ERROR");
    }
    int count = 0;
    int count2 = 0;
    int finalcount = 0;
    int max;

    while (!feof(in))
    {
        fscanf(in, "%d %d %d %d %d %d %d %d %d %d %d %d",&one, &two, &three, &four, &five, &six, &seven, &eight, &nine, &ten, &ele, &twel);
        count++;
        //to print all the barcodes:
        //printf("%d %d %d %d %d %d %d %d %d %d %d %d\n",one ,two, three, four, five, six, seven, eight, nine, ten, ele, twel);

        while((!feof(in)))
        {
            max = finalcount; // trying to find the maximum count first. 
            fscanf(in, "%d %d %d %d %d %d %d %d %d %d %d %d",&one2, &two2, &three2, &four2, &five2, &six2, &seven2, &eight2, &nine2, &ten2, &ele2, &twel2);
            if(one == one2 && two == two2 && three == three2 && four == four2 && five == five2 && six == six2 && seven == seven2 && eight == eight2 && nine == nine2 && ten == ten2 && ele == ele2 && twel == twel2);
            {

                if(finalcount > max)
                {
                    max = finalcount;
                }
                finalcount++;

            }

            if (feof(in)) 
            break;

        }

        if (feof(in)) 
            break;
    }

    fclose(in);
    //printf("Count2 %d",count2);
    printf("Final count %d ", finalcount);
    printf("Max count %d ", max);
    return 0;
}

Я хотел взять одну строку чисел и попытаться сравнить ее с остальными. Но это не работает должным образом. Я очень новичок в обработке файлов, я думаю, что у меня проблема в моем logi c, а также в структуре кода. есть ли лучший способ написать код проблемы?

1 Ответ

0 голосов
/ 17 июня 2020

Вы можете достичь своей цели, выполнив следующие простые шаги (при условии, что штрих-код в числовом формате): -

  1. Откройте файл в режиме чтения и проверьте наличие ошибок при открытии файла.
  2. Считывать числа из вашего файла и сохранять их в массиве.
  3. Сортировать массив в возрастающем или убывающем порядке.
  4. В соответствии с вашей техникой сортировки, array[1] in descending order или array[n-2] in ascending order будет быть second largest barcode.
  5. Теперь, используя al oop, подсчитайте появление этого штрих-кода в массиве.
  6. Распечатайте результат.

Код:

#include <stdio.h>
#include <stdlib.h>

#define SIZE 10

// There are 10 no. inside barcode.txt
void bubbleSort(long int *array, int n)
{
    int i, j, temp;
    for(i = 0; i < n; ++i)
    {
        for(j = i+1; j < n; ++j)
        {
            if(array[i] <= array[j])
            {
                temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
}

// main()
int main()
{
    FILE *barcode;
    long int buffer[SIZE], second_largest = 0;
    int i = 0, appearance = 0;

    barcode = fopen("barcode.txt", "r");
    if( !barcode )
    {
        perror("barcode.txt");
        exit(-2);
    }
    // Storing data into buffer.
    while(fscanf(barcode, "%ld", &buffer[i++]) != EOF);

    // Sorting buffer in descending order.
    bubbleSort(buffer, SIZE);

    second_largest = buffer[1];
    for ( i = 0; i < SIZE; ++i)
    {
        if(second_largest == buffer[i])
            appearance++;
    }
    printf("Second largest barcode %ld appeared %d times in the file.\n", second_largest, appearance);
    fclose(barcode);
    return 0;
}

Файл содержит:

21467
17283
27653
9019
26069
13826
19323
20289
13516
14657

Вывод:

Second largest barcode 26069 appeared 1 times in the file.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...