Об игре
Новости
Войти
Регистрация
Рейтинг
Форум
6:59
2131
 online
Требуется авторизация
Вы не авторизованы
   Форумы-->Форум для внеигровых тем-->
1|2|3|4|5

АвторС++ гуру :)
для КусочекНеба:
нажми на изображение для увеличения...
Для Triode:
Да, потоки надо закрывать. Они автоматически закрываются деструктором.

Для Mechtatel:
Через пару-тройку часов пойду на нормальной машине компилировать, все отлажу и выложу тебе сюда нормальную версию.
Хм, у меня все работает. Возможно, у тебя крэш из-за маленького стека, убери тогда мой массив int a[SIZE_ARRAY]; и подставь свой, в котором ты хочешь держать числа.

Конечно, если досконально следовать букве твоего задания то нужно читать последние 20 чисел в строке, а не числа с 5 по 24 позицию. Если это критично, то можно с помощью getline() читать все в вектор, а потом из него брать последние 20 элементов.



#include <fstream>
//#include <iostream>
#include <sstream>

using namespace std;

const int SIZE_ARRAY = 1000; // Размер массива int a[n]
int a[SIZE_ARRAY];

int main ()
{
ifstream ifs("data.dat");
if (ifs)
{
string temp;
int p = 0; // Номер позиции в массиве
while (ifs.good())
{
const int NUM_COL_SKIP = 4; // Пропустить первые 4 числа
const int NUM_COL_TAKE = 20; // Взять следующие 20 чисел
for (int i = 0; i < NUM_COL_SKIP; i++)
ifs >> temp;
for (int i = 0; i < NUM_COL_TAKE; i++) {
ifs >> temp;
istringstream (temp) >> a[p++];
}
}
}

// for (int i = 0; i < 100; i++) cout << i << ": " << a[i] << endl;
}
А, я понял, отчего у тебя падает. Файл содержит явно больше, чем 1000 чисел, поэтому происходит запись за пределы массива. Увеличь размер.
Вот в этом и состоят проблемы С, всегда нужно следить за размерам данных.
А на С++ можно использовать вектор, который сам увеличивает свой размер, если это необходимо.
А, я понял, отчего у тебя падает. Файл содержит явно больше, чем 1000 чисел, поэтому происходит запись за пределы массива. Увеличь размер.
Или заменить while (ifs.good()) на цикл со счётчиком до конца массива с этой же проверкой, что-то вроде
for (int n = 0; i < SIZE_ARRAY && ifs.good(); i++) {...}

для Mechtatel:
Такие ошибки легко в отладчике отследить. Интересно, что ты подразумевал под "это неготовая программа такую ошибку выдаёт".
Да, так надежнее. Хотя вообще, неудобно с массивами. Даже если сейчас он подберет оптимальный SIZE_ARRAY, то никто не гарантирует, что файл не увеличится в будущем.
Лучше всего использовать vector<int>;
для RealPsycho:
предполагается, что количество строк будет известным, а собственно оттуда и количество чисел в массиве. 1000 чисел я так написал от балды как говорят, чтобы проверить будет ли работать, думал будет достаточно ...
для RealPsycho:
поставил размер массива 10000 , вроде заработало :) Ещё вот такой глупый вопрос: откуда компилятор знает, что это выражение :

05.09.2011

всего навсего только одно число ? Потому, что между двумя пробелами находится или по какому другому критерию ? :)
есть файл с такими данными :

3650 08.04.2011 А 1 3 6 19 20 21 27 28 33 40 46 47 50 51 56 57 59 60 61 64 77
3651 09.04.2011 А 2 4 5 6 7 9 11 13 15 23 26 35 38 40 41 44 48 54 63 71 76
3652 10.04.2011 А 3 5 8 10 12 21 24 31 32 34 55 57 58 59 63 67 69 70 71 73 74
3653 11.04.2011 А 1 1 3 10 15 21 24 26 27 32 39 43 45 47 49 50 51 55 62 68 77


а нужно чтобы было :
3 6 19 20 21 27 28 33 40 46 47 50 51 56 57 59 60 61 64 77
4 5 6 7 9 11 13 15 23 26 35 38 40 41 44 48 54 63 71 76
5 8 10 12 21 24 31 32 34 55 57 58 59 63 67 69 70 71 73 74
1 3 10 15 21 24 26 27 32 39 43 45 47 49 50 51 55 62 68 77


У меня есть идея: если у тебя уже есть файл, который нужно получить, то ты можешь просто заменить первоначальный файл тем, который нужно получить.
Ну как?
08.04.2011
точнее вот этот набор. Откуда компилятор знает что это одно чило ? Я в сообщении 87 немного неудачный пример привел - не с первого сообщения темы, поэтому трудно будет разобраться :)
для Некресть:
нет )) у меня нет конечного файла )) он каждый раз будет другим. Я когда раньше писал эту программу на Qbasic вручную чистил все строки в файле, чтобы получить такой результат :) (просто не было времени разбираться с написанием программы да и не знал если честно как организовать это всё) и у меня уходило до часа каждый раз на ручную чистку. :( Поэтому спасибо RealPsycho за то, что облегчил мои страдания :)
Интересно, что ты подразумевал под "это неготовая программа такую ошибку выдаёт".
я имел ввиду что ещё не готовая программа, а только в компиляторе. То есть не собранная уже в один файл, как конечная :)
тема закрыта by Mechtatel (2012-01-28 23:59:48)
1|2|3|4|5
К списку тем
2007-2025, онлайн игры HeroesWM