Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2013, 18:32   #1
BigDaddy
Пользователь
 
Регистрация: 23.11.2012
Сообщений: 45
По умолчанию вылетаю из while ...

небольшая задачка у меня
есть текстовый файл
читаю его построчно, разбиваю на переменные массива до разделителя "/", и ... улетаю
подскажите, пожалуйста:

тексовый файл 1.txt:

Manchester United/Patrice Evra/27/4/5/
Manchester United/Michael Carrick/26/0/4/
Manchester United/Robin Van Persie/25/19/8/

текст программы:
Код:
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#include <string>
using namespace std;

int main(void)
{
char player[60][4];
// team , player name, games , goals, assist

char tteam[60][7];

ifstream f1("1.txt");
string lin, x;

int i=0, j=0, k=-1;

   while(!f1.eof())
   {
   getline(f1,lin);
      k++;
      int i=0;
      while(lin[i]!='\0')
      {
      while (lin[i]!='/')
       {
       player[k][j]= lin[i];
        cout << player[k][j];
                i++;
        }
        j++; 
        i++;
    getchar();
}
}  
return 0;
}
лучше день потерять, а потом за пять минут долететь

Последний раз редактировалось BigDaddy; 19.03.2013 в 17:08.
BigDaddy вне форума Ответить с цитированием
Старый 18.03.2013, 18:41   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Куда вылетаете? На Мадагаскар?
Рискну предположить, что происходит обращение к памяти за пределами массива player, ибо k и j растут неограниченно. В коде вообще творится ужас, а отсутствие форматирования ни разу не помогает в нём разобраться. Используйте тег форума CODE для оформления программного кода.
Abstraction вне форума Ответить с цитированием
Старый 18.03.2013, 18:45   #3
BigDaddy
Пользователь
 
Регистрация: 23.11.2012
Сообщений: 45
По умолчанию

извините ))
поправил с code

но все равно она у меня не работает....
почему-то не видит конец строки что ли...
где-то я лишний i++ ставлю, но не могу понять, где и ...
и что теперь делать?
лучше день потерять, а потом за пять минут долететь

Последний раз редактировалось BigDaddy; 18.03.2013 в 18:47.
BigDaddy вне форума Ответить с цитированием
Старый 18.03.2013, 18:47   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Скажите пожалуйста, а что этот код вообще должен делать?
Читать файл?
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 18.03.2013, 19:02   #5
BigDaddy
Пользователь
 
Регистрация: 23.11.2012
Сообщений: 45
По умолчанию

да,
должен построчно читать текстовый файл
загонять в ячейки массива все символы каждой строки файла 1.txt до "/"
и так по всем строкам
и...
Мадагаскар...
я попробовал добавить lin.length()- размер длины строки
и ....
лучше, но не то...
лучше день потерять, а потом за пять минут долететь

Последний раз редактировалось BigDaddy; 18.03.2013 в 20:11.
BigDaddy вне форума Ответить с цитированием
Старый 19.03.2013, 11:10   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

1) Когда я вижу цикл while(true), я ищу внутри break или return. В данном случае не нашёл ни того, ни другого - значит, цикл вечный.
2)
Код:
      while (lin[i]!='/')
       {
       player[k][j]= lin[i];

        cout << player[k][j];
                i++;
        }
Ни k, ни j не меняются в теле цикла - следовательно, будет перезаписываться один и тот же элемент массива player.
3)
Код:
      dl=0;
      dl=sizeof lin;
Код бессмысленен. Более того, он неправилен, компилятор должен был выдать ошибку. Более того, sizeof(lin) - бесполезная для Вас величина.
4) Логическая ошибка: Вы читаете строку, пока не встретите '\0'. В ней вы читаете слово, пока не встретите '/'. Когда Вы читаете последнее слово, в конце его нет '/'. Упс.
Abstraction вне форума Ответить с цитированием
Старый 19.03.2013, 16:35   #7
BigDaddy
Пользователь
 
Регистрация: 23.11.2012
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
4) Логическая ошибка: Вы читаете строку, пока не встретите '\0'. В ней вы читаете слово, пока не встретите '/'. Когда Вы читаете последнее слово, в конце его нет '/'. Упс.

ДАААААААА!!!!!!!!
вот оно!!!!!!!!!
я в текстовом файле 1.txt добавил в конце каждой строки "/"
и все заработало!!

Manchester United/Michael Carrick/26/0/4/
Manchester United/Robin Van Persie/25/19/8/
Manchester United/Rafael/21/3/3/

спасибо огромное!!!!!!!!
буду пыхтеть дальше.....
лучше день потерять, а потом за пять минут долететь

Последний раз редактировалось BigDaddy; 19.03.2013 в 16:48.
BigDaddy вне форума Ответить с цитированием
Старый 19.03.2013, 16:45   #8
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
у меня уже подозрение, что у меня глючный DEV C++
Существуют проблемы со средами разработки, особенно теми, которыми пользуется малое число людей. Однако, 99,(9)% проблем начинающих программистов лежит в их собственном коде.

Вот смотрите: Вы читаете первую строку. Читаете, читаете, наконец прочитали символ '5' и записали его в player[0][4]. Вывели символ player[0][4] (вывелось '5'). Увеличили i на 1. Проверили условие цикла: lin[i]!='/'. Оно истинно (потому что lin[i] теперь равно '\0'). Записали его в player[0][4] (затерев символ '5'). Вывели символ player[0][4] (вывелось ничего). Увеличили i на 1. Попытались проверить условие цикла: lin[i]!='/'. Класс string сообразил, что Вы уже лезете куда-то не туда и ка-ак заорёт. Программа падает.

К слову: принято, что при нормальном завершении main возвращает код завершения 0. Любой ненулевой код традиционно считается признаком какой-то ошибки.
Abstraction вне форума Ответить с цитированием
Старый 19.03.2013, 16:50   #9
BigDaddy
Пользователь
 
Регистрация: 23.11.2012
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
К слову: принято, что при нормальном завершении main возвращает код завершения 0. Любой ненулевой код традиционно считается признаком какой-то ошибки.
спасибо большое, там все уже заработало после добавления "/"))
это у меня уже была истерика с агонией - и я добавлял и return 1, и длину строки ограничивал... искал, в общем, но не там...
лучше день потерять, а потом за пять минут долететь
BigDaddy вне форума Ответить с цитированием
Старый 19.03.2013, 17:06   #10
BigDaddy
Пользователь
 
Регистрация: 23.11.2012
Сообщений: 45
По умолчанию

в первом своем посте все поправил - теперь там все рабочее...
лучше день потерять, а потом за пять минут долететь
BigDaddy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вылетаю после inter'a Carn Общие вопросы C/C++ 4 23.03.2010 23:58