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

Почему не считывает? - C++

Восстановить пароль Регистрация
 
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 15:50     Почему не считывает? #1
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
int range = 3638;
double *svchlen = new double [range];
    ifstream fin11("5.txt");
    double t;
    int qwer = 0;
    while( fin11 >> t )
    {
        svchlen[qwer] = t;
        qwer++;
    }
    fin11.close();
После этих строчек динамический массив svchlen почему-то пустой.. Почему? Как код исправить то?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
28.07.2011, 16:00     Почему не считывает? #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
using namespace std;
 
int main() {
    int range = 3638;
    double *svchlen = new double [range];
            ifstream fin11("5.txt");
            double t;
            int qwer = 0;
            while( fin11 >> t )
            {
                    svchlen[qwer] = t;
                    cout << svchlen[qwer] << endl; //добавили для проверки вывода
                    qwer++;
 
            }
            fin11.close();
                cout << svchlen[2] << endl;
 
            delete [] svchlen; //не забывать удалять динамический массив
}
Содержимое файла 5.txt:
Код
1 2 3 4 5 6
Вывод в консоль:
Код
1
2
3
4
5
6
3
Все считывает.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
28.07.2011, 16:07     Почему не считывает? #3
Зачем так париться-то...
C++
1
2
3
4
5
int range = 3638, i = 0;
double *svchlen = new double [range];
for (std::ifstream fin11("5.txt"); fin11 >> svchlen[i++];);
//some code
delete[] svchlen;
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 16:08  [ТС]     Почему не считывает? #4
А в массив тоже правильно считалось??? просто у меня массив пустой почему-то...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.07.2011, 16:08     Почему не считывает? #5
hello19, А файл то создан товарищ?
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 16:13  [ТС]     Почему не считывает? #6
Создан
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.07.2011, 16:13     Почему не считывает? #7
Цитата Сообщение от diagon Посмотреть сообщение
Зачем так париться-то...
Меньше не значит Лучше!
Код совершенно не читабелен. Цикл for используется не по назначению. В общем, не надо так делать.)
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,689
28.07.2011, 16:15     Почему не считывает? #8
а чем обусловлено такое имя массива ?)
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 16:16  [ТС]     Почему не считывает? #9
у кого то проблемы я смотрю...
там храниться столбец свободных членов
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
28.07.2011, 16:22     Почему не считывает? #10
Цитата Сообщение от Deviaphan Посмотреть сообщение
Меньше не значит Лучше!
Никаких лишних переменных не надо, и поток существует только пока выполняется цикл.

Цитата Сообщение от Deviaphan Посмотреть сообщение
Цикл for используется не по назначению.
А какое у for предназначение?

Цитата Сообщение от Deviaphan Посмотреть сообщение
Код совершенно не читабелен.
Тут соглашусь, но его расшифровка займет ненамного больше времени, чем чтение кода из первого поста.
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
28.07.2011, 16:24     Почему не считывает? #11
А в массив тоже правильно считалось??? просто у меня массив пустой почему-то...
В моем примере все считалось - первые 6 шесть элементов массива были считаны из файла - с начала файла до конца. Остальные (3638 - 6) элементов, начиная с элемента svchlen[ 6 ] не считаны из файла, так как файл содержит всего 6 чисел. Также я показал - вывод третьего элемента массива svchlen[ 2 ] - и как можно увидеть - элемент равен 3.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.07.2011, 16:29     Почему не считывает? #12
Цитата Сообщение от diagon Посмотреть сообщение
А какое у for предназначение?
Создание простых циклов. Со строго заданным порядком выражений: создание итератора ; проверка условия ; инкремент итератора.
Для всех прочих циклов есть do/while.
В твоём же варианте, вместо итератора создаётся поток, вместо проверки условия происходит инкремент счётчика, чтение значения и проверка условия.
Думаешь код хорош? Удали файл "5.тхт" и убедись, что ты не прав.
Запиши в файл 100500 значений и ещё раз убедись, что не прав.

Цитата Сообщение от diagon Посмотреть сообщение
и поток существует только пока выполняется цикл
Сложно закрыть?

Цитата Сообщение от diagon Посмотреть сообщение
Тут соглашусь, но его расшифровка займет не больше времени...
Но его нужно расшифровывать. Плюс не видны куча ошибок, о которых я написал выше.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
28.07.2011, 16:45     Почему не считывает? #13
Цитата Сообщение от Deviaphan Посмотреть сообщение
Со строго заданным порядком выражений: создание итератора ; проверка условия ; инкремент итератора
А не проще ли foreach из 0x использовать для таких целей?
Цитата Сообщение от Deviaphan Посмотреть сообщение
Сложно закрыть?
Относительно моего варианта - сложно =)
Цитата Сообщение от Deviaphan Посмотреть сообщение
Удали файл "5.тхт" и убедись, что ты не прав.
Не всегда требуется проверка на существование файла.


Цитата Сообщение от Deviaphan Посмотреть сообщение
Запиши в файл 100500 значений и ещё раз убедись, что не прав
Так пойдет?
C++
1
2
3
4
5
int range = 3638, i = 0;
double *svchlen = new double [range];
for (std::ifstream fin11("5.txt"); fin11 >> svchlen[i++] && i < range;);
//some code
delete[] svchlen;
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.07.2011, 16:46     Почему не считывает? #14
diagon, не стоит так делать он прав.
в 0x не будет for_each, в 0x будет новый вариант цикла for. А for_each итак уже есть, пусть и как алгоритм. А так же BOOST_FOREACH вдобавок.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.07.2011, 16:46     Почему не считывает? #15
Цитата Сообщение от diagon Посмотреть сообщение
Не всегда требуется проверка на существование файла
На каждую ошибку найдётся свой пользователь.
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
28.07.2011, 16:49     Почему не считывает? #16
Мне нравится вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
using namespace std;
 
int main() {
    int range = 3638;
    double *svchlen = new double[ range ];
    ifstream fin11( "5.txt" );
    int qwer = 0;
 
    while ( fin11 >> svchlen[ qwer ] )
        ++qwer;
 
/*  эквивалент предыдущему циклу:
 *  while ( fin11 >> svchlen[ qwer++ ] )
 *      ; //пустая инструкция
*/
    fin11.close();
    cout << svchlen[ 2 ] << endl;
 
    delete[] svchlen;
}
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
28.07.2011, 16:50     Почему не считывает? #17
Цитата Сообщение от ForEveR Посмотреть сообщение
0x будет новый вариант цикла for
Так я про него и говорю
Это который
C++
1
2
for (int& i : array)
  std::cout << i;
Цитата Сообщение от Deviaphan Посмотреть сообщение
На каждую ошибку найдётся свой пользователь.
А если сами файл создавали?


Цитата Сообщение от ForEveR Посмотреть сообщение
diagon, не стоит так делать он прав.
В общем-то я согласен, но в некоторых случаях такой код оправдан.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2011, 16:52     Почему не считывает?
Еще ссылки по теме:

Написать программу которая считывает считывает текст из файла и записывает в другой слова состоящие не менее чем из 7 букв C++
ifstream считывает 0 C++
C++ Не считывает данные

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.07.2011, 16:52     Почему не считывает? #18
Раз пошла такая песня, то (игнорируя все мои замечания), мне нравится так.)
C++
1
2
3
4
do
{
    fin11 >> svchlen[qwer++];
}while(fin11);
Добавлено через 45 секунд
Цитата Сообщение от diagon Посмотреть сообщение
в некоторых случаях такой код оправдан
В некоторых - безусловно! Но это не тот случай.)

Добавлено через 44 секунды
Цитата Сообщение от diagon Посмотреть сообщение
А если сами файл создавали?
"создавали" - прошедшее время. Поэтому файла может и не быть уже.)
Yandex
Объявления
28.07.2011, 16:52     Почему не считывает?
Ответ Создать тему
Опции темы

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