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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
bond95
Мы все БОЛЬШАЯ программа
51 / 51 / 2
Регистрация: 16.04.2009
Сообщений: 489
#1

бесконечный цикл - C++

26.12.2010, 15:12. Просмотров 1258. Ответов 11
Метки нет (Все метки)

Когда пытаюсь считать строки из файла с помощью цикла, он почему то начинает повторятся бесконечно. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(int argc, char* argv[])
{
 FILE *f3;
 char *name;
 if((f3=fopen("test2.txt","r"))==NULL) {
    return 0;
 }
  while ( fgets(name,25,f3)!=NULL) {  //считывание файла до тех пор пока он не закончится
      std::cout<<"read";
      Sleep(1000);
}
 
 fclose(f3);
    return 0;
}
Помогите найти ошибку пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.12.2010, 15:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос бесконечный цикл (C++):

Почему цикл на при 1 уходит в бесконечный цикл? - C++
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { int x=0, y=0,...

Бесконечный цикл - C++
#include &lt;iostream&gt; #include &lt;climits&gt; bool is_int(double); int main() { using namespace std; double num; cout &lt;&lt; &quot;Yo,...

Бесконечный цикл - C++
Как ввести программу в бесконечный цикл на C++ ? Смотрел видео где делали бесконечный цикл (НО!) это было на Small Basic'е, а мне нужно...

Бесконечный цикл - C++
Задача: Дед Мазай спасает зайцев. На N островках находится некоторое количество зайцев разной массы. Грузоподъемность лодки Мазая...

Бесконечный цикл - C++
#include &lt;iostream&gt; using namespace std; int main() { int i=0; double ea; while(i!=-1) { ...

Бесконечный цикл - C++
Задача: Ввести количество камней, ввести вес каждого камня, сложить камни в 2 кучки так чтобы разница между общими массами кучек были...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IROKEZ
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 19
26.12.2010, 15:46 #2
попробуйте переделать условие конца цикла, а именно
C++
1
2
3
while(!feof(f3))
{
}
bond95
Мы все БОЛЬШАЯ программа
51 / 51 / 2
Регистрация: 16.04.2009
Сообщений: 489
26.12.2010, 15:54  [ТС] #3
получается тоже самое
RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
26.12.2010, 16:05 #4
C++
1
while ( fgets(name,25,f3)!=NULL)
Может всё таки
C++
1
while ( fgets(name,25,f3)!=EOF)
IROKEZ
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 19
26.12.2010, 16:05 #5
bond95,
Сейчас глянул свои исходники (похожие задачи были), попробуйте вместо !=NULL поставить !=EOF
bond95
Мы все БОЛЬШАЯ программа
51 / 51 / 2
Регистрация: 16.04.2009
Сообщений: 489
26.12.2010, 16:17  [ТС] #6
Теперь вообще компилироваться не хочет. Пишет:
D:\Bogdan\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\backward\backward_warning.h|32|warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.|
C:\Users\Ya\Documents\RAD Studio\Projects\test.cpp||In function `int main(int, char**)':|
C:\Users\Ya\Documents\RAD Studio\Projects\test.cpp|20|error: ISO C++ forbids comparison between pointer and integer|
||=== Build finished: 1 errors, 1 warnings ===|
RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
26.12.2010, 16:39 #7
Сорри, тут правильно. Должно быть !=NULL.
При достижении конца файла функция возвращает NULL

Добавлено через 5 минут
да Вы указателю name ничего не присвоили

Добавлено через 2 минуты
name - указатель на строку символов, но адреса строки Вы в него не записали. Бесконечного цикла тут нет
bond95
Мы все БОЛЬШАЯ программа
51 / 51 / 2
Регистрация: 16.04.2009
Сообщений: 489
26.12.2010, 16:42  [ТС] #8
А что я должен присвоить?

Добавлено через 2 минуты
Все заработало, вот только оно почему то только одну строку читает.
RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
26.12.2010, 16:48 #9
Указатель - это адрес ячейки в памяти. Вы его только объявили, и он у Вас равен NULL, так как еще никуда не указывает. То есть Вы должны либо выделить память под строку, либо просто, не заморачиваясь, вместо char *name, пишите char name[256], то есть объявите символьную строку, размером в 256 символов
bond95
Мы все БОЛЬШАЯ программа
51 / 51 / 2
Регистрация: 16.04.2009
Сообщений: 489
26.12.2010, 16:54  [ТС] #10
все работает спасибо
RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
26.12.2010, 16:59 #11
Он читает не одну строку, а все строки, но загоняет их в одну строковую переменную, перезаписывая ячейки, и в конце добавляя \0, таким образом при попытке вывести содержание name на экран, Вы получаете только последнюю строку. Что именно Вы хотите сделать? Какова цель программы?
bond95
Мы все БОЛЬШАЯ программа
51 / 51 / 2
Регистрация: 16.04.2009
Сообщений: 489
26.12.2010, 21:08  [ТС] #12
Я хочу сделать эмулятор файловой системы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.12.2010, 21:08
Привет! Вот еще темы с ответами:

Бесконечный цикл - C++
Здравствуйте. Программа должна принимать некоторые значения, обрабатывать их и выдавать в виде статистики (нарисовать звездочками). ...

Бесконечный цикл - C++
Народ помогите у меня зациклился цикл. Что я сделал не так вроде условие выхода есть или может другой цикл использовать? Использовал do -...

Бесконечный цикл - C++
Есть бесконечный цикл,благодаря которому постоянно вызываются функции. Из за этого бесконечного цикла глючит программу. Есть ли другой...

Бесконечный цикл - C++
Ребят, что-то цикл выполняется постоянно. Покажите ошибку мне/ #include &lt;iostream&gt; using namespace std; int main() { ...


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

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

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