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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
bond95
Мы все БОЛЬШАЯ программа
 Аватар для bond95
51 / 51 / 2
Регистрация: 16.04.2009
Сообщений: 489
26.12.2010, 15:12     бесконечный цикл #1
Когда пытаюсь считать строки из файла с помощью цикла, он почему то начинает повторятся бесконечно. Вот код:
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++ Бесконечный цикл
Бесконечный цикл C++
C++ Почему цикл на при 1 уходит в бесконечный цикл?
Бесконечный цикл while C++
C++ Бесконечный цикл
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IROKEZ
0 / 0 / 0
Регистрация: 18.04.2010
Сообщений: 19
26.12.2010, 15:46     бесконечный цикл #2
попробуйте переделать условие конца цикла, а именно
C++
1
2
3
while(!feof(f3))
{
}
bond95
Мы все БОЛЬШАЯ программа
 Аватар для bond95
51 / 51 / 2
Регистрация: 16.04.2009
Сообщений: 489
26.12.2010, 15:54  [ТС]     бесконечный цикл #3
получается тоже самое
RUSya82
 Аватар для 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
Мы все БОЛЬШАЯ программа
 Аватар для 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
 Аватар для RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
26.12.2010, 16:39     бесконечный цикл #7
Сорри, тут правильно. Должно быть !=NULL.
При достижении конца файла функция возвращает NULL

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

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

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

C++ Бесконечный цикл for
C++ Бесконечный цикл
Бесконечный цикл C++

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

Или воспользуйтесь поиском по форуму:
bond95
Мы все БОЛЬШАЯ программа
 Аватар для bond95
51 / 51 / 2
Регистрация: 16.04.2009
Сообщений: 489
26.12.2010, 21:08  [ТС]     бесконечный цикл #12
Я хочу сделать эмулятор файловой системы.
Yandex
Объявления
26.12.2010, 21:08     бесконечный цикл
Ответ Создать тему
Опции темы

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