Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313

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

28.07.2011, 15:50. Показов 1558. Ответов 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 почему-то пустой.. Почему? Как код исправить то?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.07.2011, 15:50
Ответы с готовыми решениями:

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

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

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

17
 Аватар для Roof
155 / 155 / 44
Регистрация: 03.11.2010
Сообщений: 393
28.07.2011, 16:00
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:
Code
1
1 2 3 4 5 6
Вывод в консоль:
Code
1
2
3
4
5
6
7
1
2
3
4
5
6
3
Все считывает.
1
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
28.07.2011, 16:07
Зачем так париться-то...
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;
1
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 16:08  [ТС]
А в массив тоже правильно считалось??? просто у меня массив пустой почему-то...
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.07.2011, 16:08
hello19, А файл то создан товарищ?
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 16:13  [ТС]
Создан
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.07.2011, 16:13
Цитата Сообщение от diagon Посмотреть сообщение
Зачем так париться-то...
Меньше не значит Лучше!
Код совершенно не читабелен. Цикл for используется не по назначению. В общем, не надо так делать.)
1
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
28.07.2011, 16:15
а чем обусловлено такое имя массива ?)
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
28.07.2011, 16:16  [ТС]
у кого то проблемы я смотрю...
там храниться столбец свободных членов
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
28.07.2011, 16:22
Цитата Сообщение от Deviaphan Посмотреть сообщение
Меньше не значит Лучше!
Никаких лишних переменных не надо, и поток существует только пока выполняется цикл.

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

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

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

Цитата Сообщение от diagon Посмотреть сообщение
Тут соглашусь, но его расшифровка займет не больше времени...
Но его нужно расшифровывать. Плюс не видны куча ошибок, о которых я написал выше.
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
28.07.2011, 16:45
Цитата Сообщение от 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;
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
28.07.2011, 16:46
diagon, не стоит так делать он прав.
в 0x не будет for_each, в 0x будет новый вариант цикла for. А for_each итак уже есть, пусть и как алгоритм. А так же BOOST_FOREACH вдобавок.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.07.2011, 16:46
Цитата Сообщение от diagon Посмотреть сообщение
Не всегда требуется проверка на существование файла
На каждую ошибку найдётся свой пользователь.
0
 Аватар для Roof
155 / 155 / 44
Регистрация: 03.11.2010
Сообщений: 393
28.07.2011, 16:49
Мне нравится вот так:

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;
}
1
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
28.07.2011, 16:50
Цитата Сообщение от ForEveR Посмотреть сообщение
0x будет новый вариант цикла for
Так я про него и говорю
Это который
C++
1
2
for (int& i : array)
  std::cout << i;
Цитата Сообщение от Deviaphan Посмотреть сообщение
На каждую ошибку найдётся свой пользователь.
А если сами файл создавали?


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

Добавлено через 44 секунды
Цитата Сообщение от diagon Посмотреть сообщение
А если сами файл создавали?
"создавали" - прошедшее время. Поэтому файла может и не быть уже.)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.07.2011, 16:52
Помогаю со студенческими работами здесь

Почему не правильно считывает символы из файла?
FILE *fn; fopen_s(&amp;fn, &quot;code.txt&quot;, &quot;r&quot;); char s = ' '; char *message = new char; int c = 0; while ((s = fgetc(f)!=EOF)) { ...

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

Почему getline не считывает строку при первом проходе цикла?
В данной функции: void ArrayStr::InputArr(void) { cout &lt;&lt; &quot;Введите строки длинной не более &quot; &lt;&lt; range &lt;&lt; &quot;...

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

Почему при вводе строки с пробелом программа считывает только символы до пробела?
#include &lt;iostream&gt; using namespace std; int main() { string T; int S=0, i,d, m=0, n=0, p=0; cout&lt;&lt; &quot;...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru