Форум программистов, компьютерный форум CyberForum.ru

Программа находит макс. номер в файле... - C++

Восстановить пароль Регистрация
 
OVERPOWER8
 Аватар для OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
21.12.2009, 13:53     Программа находит макс. номер в файле... #1
Написал программу с классами fstream, которая в определенном файле находит мин. номер и макс. номер. (в файле - только целочисленные номера)

Минимальный номер находит правильно, но вместо максимального - всегда последний в файле. В чем же дело?

Функция нахождения максимального номера:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int FindMax(fstream &File)
{
    char ch[5];
    File >> ch;
    int max = atoi(ch);
    
    while(!File.eof())
    {
        File >> ch;
        if(atoi(ch) > max)
            max = atoi(ch);
    }
    return max;
}
Функция main:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
    int max;
 
    char ch[5];
 
    fstream File("Numbers.txt");
 
    max = FindMax(File);
    
 
    cout <<  "Max: " << max << endl;
    
    File.close();
                
    return 0;
}
Вот - содержание файла:

Bash
1
2
3
4
5
83 92 2 10 92 
46 83 11 63 47 
37 31 58 59 72 
15 9 72 91 29 
35 70 29 29 23
Функция возвращает 23, а должна - 92.

Добавлено через 2 минуты
P. S. Файл сгенерирован функцией:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void GenerateFile(fstream &File)
{
    srand(time(0));
    int number;
    
    for(int i=0; i<5; i++)
    {
        for(int j=0; j<5; j++)
        {
            number=rand()%100+1;
            File << number << " ";
        }
        File << "\n";
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.12.2009, 13:53     Программа находит макс. номер в файле...
Посмотрите здесь:

C++ Составить программу, которая находит номер элемента, значение которого меньше всего откланяется от среднего значения всех элементов
Найти номер первого макс значения среди отрицательных элементов C++
C++ Ввести номер строки массива и определ. разность между макс и мин элементом
C++ Составить программу, которая находит номер столбца, в котором находится самая длинная серия одинаковых элементов
Программа для подсчета макс. и миним. значений прерменных int shortint longint C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
21.12.2009, 14:20     Программа находит макс. номер в файле... #2
У меня на 6 билдере все работает как надо.
OVERPOWER8
 Аватар для OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
21.12.2009, 14:35  [ТС]     Программа находит макс. номер в файле... #3
Видимо, компилятор G++ в этом случае неправильно работает.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
21.12.2009, 14:43     Программа находит макс. номер в файле... #4
Цитата Сообщение от OVERPOWER8 Посмотреть сообщение
Функция возвращает 23, а должна - 92.
23 находится в конце файла, такое ощущение что if почему-то не работает, те при каждом считывании из файла значения, оно присваивается мах.
OVERPOWER8
 Аватар для OVERPOWER8
19 / 19 / 1
Регистрация: 29.11.2009
Сообщений: 224
21.12.2009, 15:25  [ТС]     Программа находит макс. номер в файле... #5
Понял, в чем дело - надо после каждой операции закрывать поток:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <fstream>
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
void GenerateFile(fstream &File)
{
    srand(time(0));
    int number;
    
    for(int i=0; i<5; i++)
    {
        for(int j=0; j<5; j++)
        {
            number=rand()%100+1;
            File << number << " ";
        }
        File << "\n";
    }
}
 
int FindMin(fstream &File)
{
    char ch[5];
    File >> ch;
    int min = atoi(ch);
    
    while(!File.eof())
    {
        File >> ch;
        if(atoi(ch) < min)
            min = atoi(ch);
    }
    return min;
}
 
int FindMax(fstream &File)
{
    char ch[5];
    File >> ch;
    int max = atoi(ch);
    
    while(!File.eof())
    {
        File >> ch;
        if(atoi(ch) > max)
            max = atoi(ch);
    }
    return max;
}
 
int main()
{
    fstream SaveFile("Numbers.txt");
    GenerateFile(SaveFile);
    SaveFile.close();
    
    int min, max, currNumber;
    bool firsttime = true;
    
    char ch[5];
    
    fstream File("Numbers.txt");
 
    min = FindMin(File);
    File.close();
    
    File.open("Numbers.txt");
    
    max = FindMax(File);
    
    cout << "Min: " << min;
    cout << endl << "Max: " << max << endl;
    
    File.close();
                
    return 0;
}
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
21.12.2009, 18:54     Программа находит макс. номер в файле... #6
OVERPOWER8,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <fstream>
#include <iterator>
#include <algorithm>
 
int main()
{
    const std::string str = "d:\\file.txt";
    std::ifstream in(str.c_str());
 
    std::cout << "max:" << *std::max_element((std::istream_iterator <int> (in)), (std::istream_iterator <int> ())) << std::endl;
    system("pause");
    return 0;
}
Yandex
Объявления
21.12.2009, 18:54     Программа находит макс. номер в файле...
Ответ Создать тему
Опции темы

Текущее время: 14:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru