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

Обработка массива, считанного из файла; найти ошибку - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Удалить все цифры из заданного слова и подсчитать количество изъятий http://www.cyberforum.ru/cpp-beginners/thread1211536.html
Удалить все цифры из заданного слова и подсчитать количество изъятий. будто простое, но вообще не разбираюсь в символах, может кто-то поможет)
C++ Какая разница между аргументами и параметрами? #include <iostream> using namespace std; //объявление функции int mystrlen(char *str); //В скобочках это параметр функции ? int main() { cout << "Длина строки ПРИВЕТ ВСЕМ равна: "; http://www.cyberforum.ru/cpp-beginners/thread1211530.html
виртуальные функции C++
Составить программу с одним родительским классом и двумя потомками. Все поля должны быть закрытыми. Потомки должны содержать виртуальные функции. Для родительского класса создать статическую функцию выдачи результатов расчета виртуальной функции на экран монитора. Составить тестирующую программу. В ней нужно реализовать вывод параметров объектов на экран монитора. (Вариант 1) составить...
Std::thread постоянное выполнение функции с выводом в QtGUI C++
Необходимо, чтобы обеспечивалось постоянное передвижение картинок в qGraphicsView. При этом одна из них управляемая пользователем, а другая двигается либо по указанной траектории(траектория может меняться в зависимости от действий пользователя). Иными словами игрушка, в которой монстр преследует героя,если герой близко. Вопрос в том, как сделать, чтобы монстр двигался постоянно (используя...
C++ Существует N городов для каждой пары городов (і, j) можно построить путь http://www.cyberforum.ru/cpp-beginners/thread1211519.html
Существует N городов для каждой пары городов (і, j) можно построить путь который соединит их, но не заходит в другие города. Стоимость строительства такого пути составляет а (і, j) Определить самый быстрый способ строительства дорог который позволил бы потратить из каждого города в любой другой
C++ Массивы. Найти среднее арифметическое отрицательных элементов Найти среднее арифметическое отрицательное элементов. у меня все работает, только скажите как мне находить количество отрицательных элементов чтобы посчитать среднее #include <iostream> #include <conio.h> #include <iomanip> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main() { const int n=2,m=2; подробнее

Показать сообщение отдельно
LifeMoroz
11 / 11 / 3
Регистрация: 12.10.2013
Сообщений: 54
18.06.2014, 18:40     Обработка массива, считанного из файла; найти ошибку
C
1
2
char *filename[64];
gets(filename);
не правильно.
Сигнатура:
C
1
char * gets ( char * str );
Вы передаете указатель на массив, (аналог: char **str)
А надо указатель на блок памяти (просто указатель, char *str или char str[buffersize], не совсем одно и то же, но прокатит)
http://www.cplusplus.com/reference/cstdio/gets/

Зачем это?
C
1
2
input_file.close();cout<<"Closed\n";
input_file.open(filename);cout<<"Opened\n";

1. Я думаю, что это из-за того, что часть массива filename осталось незаполненным. Но какой тогда способ использовать для ввода полного имени файла с клавиатуры?
Прикладываю отформатированный код, мб кто-то сможет поймать багу.
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
80
81
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main() {
    int max, min ,maxind = 0, minind = 0, i = 0, n, m, dim, counter = 0;
    double s = 0;
    char filename[64];
    gets(filename);
    ifstream input_file(filename);
    ofstream output_file("C:\\temp\\result.txt");
    char temp[11];
    while(!input_file.eof()) {
        input_file >> temp;
        ++i;
    }
    dim = i;
    cout << dim << "\n";
    
    if(dim == 1) {
        cout << "Only one number in the file!";
        output_file << "Result: 0";
    } 
    else if (dim == 2) {
        cout << "Only two numbers in the file!";
        output_file << "Result: 0";
        }
    else {
        int *num = new int[dim];
        input_file.close();
        cout << "Closed\n";
        input_file.open(filename);
        cout << "Opened\n";
        input_file >> temp; 
        num[0] = atoi(temp);
        cout << num[0];
        max = num[0];
        min = num[0];
        i = 1;
    
        while(!input_file.eof()) {
            input_file >> temp; 
            num[i] = atoi(temp);
            cout << num[i] << "\n";
            ++i;
            }
        
        for(i = 0; i < dim; i++) {
            if(num[i] >= max) {
                max=num[i];
                maxind=i;
            }
            if(num[i]<=min) {
                min=num[i];
                minind=i;
            };
        }
        cout << "max=" << max << "\nmin=" << min;
        
        if (maxind > minind) {
            m = maxind;
            n = minind + 1;
        }
        if (maxind < minind) {
            n = maxind + 1;
            m = minind;
        }
        // А если равно!?
        
        for(i = n; i < m; i++) {
            if(num[i] < 0)
                s=s+num[i];
            ++counter;
        }
        s = s/counter;
        cout << s;
        output_file << "Result: " << s;
    }
    system("pause");
}
P.s. не пишите так код пожалуйста, очень сложно читать, используйте отступы и не пишите 3 команды подряд, про goto вообще молчу, просто return нужно делать
 
Текущее время: 06:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru