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

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

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

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

28.07.2011, 15:50. Просмотров 840. Ответов 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++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
1929 / 1195 / 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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
1482 / 849 / 76
Регистрация: 26.03.2010
Сообщений: 2,917
28.07.2011, 16:15 #8
а чем обусловлено такое имя массива ?)
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 16:16  [ТС] #9
у кого то проблемы я смотрю...
там храниться столбец свободных членов
diagon
Higher
1929 / 1195 / 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
1929 / 1195 / 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
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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 Посмотреть сообщение
Не всегда требуется проверка на существование файла
На каждую ошибку найдётся свой пользователь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2011, 16:46
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.07.2011, 16:46
Ответ Создать тему
Опции темы

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