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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
#1

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

28.07.2011, 15:50. Просмотров 830. Ответов 17
Метки нет (Все метки)

Вот код:
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 почему-то пустой.. Почему? Как код исправить то?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2011, 15:50     Почему не считывает?
Посмотрите здесь:

Почему не считывает весь файл? - C++
Считывает только часть файла (приблизительно 29 строк любого тхт файла). Подскажите пожалуйста в чём может быть ошибка. Вот часть кода,...

Почему stream.getline считывает до пробела? - C++
Задание: удалить все адреса изображений в html-файле (в теге img значение атрибута src заменить на пустое). void...

Почему полностью не считывает текстовый файл? - C++
Задание: Текстовый файл содержит записи о телефонах и их владельцах. Переписать в другой файл телефоны тех владельцев, фамилии которых...

Почему считывает последнюю строчку дважды? - C++
Почему считывает последнюю строчку дважды? #include<iostream> #include<cstdio> #include<cstring> #define EOF -1 using namespace...

Почему getline не считывает строку при первом проходе цикла? - C++
В данной функции: void ArrayStr::InputArr(void) { cout << "Введите строки длинной не более " << range << " символов: \n"; for...

Файловый поток вместо одного слова считывает два, почему? - C++
Друзья! Вот код #include <stdio.h> #include <iostream> #include <fstream> using namespace std; int main () { ifstream ifs...

Функция getc (FILE*) при первом вызве считывает НЕ ПЕРВЫЙ символ файла.Почему? - C++
Друзья! Здравствуйте! Вот код. #include <iostream> using namespace std; int main () { FILE* zapis_v_fail; FILE*...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
1927 / 1193 / 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
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
28.07.2011, 16:08     Почему не считывает? #5
hello19, А файл то создан товарищ?
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 16:13  [ТС]     Почему не считывает? #6
Создан
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.07.2011, 16:13     Почему не считывает? #7
Цитата Сообщение от diagon Посмотреть сообщение
Зачем так париться-то...
Меньше не значит Лучше!
Код совершенно не читабелен. Цикл for используется не по назначению. В общем, не надо так делать.)
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
28.07.2011, 16:15     Почему не считывает? #8
а чем обусловлено такое имя массива ?)
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 16:16  [ТС]     Почему не считывает? #9
у кого то проблемы я смотрю...
там храниться столбец свободных членов
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
28.07.2011, 16:22     Почему не считывает? #10
Цитата Сообщение от Deviaphan Посмотреть сообщение
Меньше не значит Лучше!
Никаких лишних переменных не надо, и поток существует только пока выполняется цикл.

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

Цитата Сообщение от Deviaphan Посмотреть сообщение
Код совершенно не читабелен.
Тут соглашусь, но его расшифровка займет ненамного больше времени, чем чтение кода из первого поста.
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++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.07.2011, 16:29     Почему не считывает? #12
Цитата Сообщение от diagon Посмотреть сообщение
А какое у for предназначение?
Создание простых циклов. Со строго заданным порядком выражений: создание итератора ; проверка условия ; инкремент итератора.
Для всех прочих циклов есть do/while.
В твоём же варианте, вместо итератора создаётся поток, вместо проверки условия происходит инкремент счётчика, чтение значения и проверка условия.
Думаешь код хорош? Удали файл "5.тхт" и убедись, что ты не прав.
Запиши в файл 100500 значений и ещё раз убедись, что не прав.

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

Цитата Сообщение от diagon Посмотреть сообщение
Тут соглашусь, но его расшифровка займет не больше времени...
Но его нужно расшифровывать. Плюс не видны куча ошибок, о которых я написал выше.
diagon
Higher
1927 / 1193 / 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
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
28.07.2011, 16:46     Почему не считывает? #14
diagon, не стоит так делать он прав.
в 0x не будет for_each, в 0x будет новый вариант цикла for. А for_each итак уже есть, пусть и как алгоритм. А так же BOOST_FOREACH вдобавок.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.07.2011, 16:46     Почему не считывает? #15
Цитата Сообщение от diagon Посмотреть сообщение
Не всегда требуется проверка на существование файла
На каждую ошибку найдётся свой пользователь.
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
1927 / 1193 / 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     Почему не считывает?
Еще ссылки по теме:

Не считывает полностью - C++
Не считывает с файла всё или не записывает, не могу разобраться. Файл состоит из нескольких числовых строк. f2 =...

ifstream считывает 0 - C++
Здравствуйте. Есть 2 текстовых файла с названиями n.in n.out .Содержимое входящего файла 1 5 2 4 3 9 4 7 5

Не считывает с файла - C++
Друзья, вообщем написал программку, в которой вводятся шесть строк, в каждой по одному слову, затем вводишь символ и начинается сравнение:...

Не считывает данные - C++
Почему программа выводит начальное значение double? как подкорректиовать программу,чтоб выводилось тоже самое что я и ввел? #include...

Не считывает с файла - C++
Приношу извинения. Уже разобрался)


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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 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     Почему не считывает?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru