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

Чтение из файла - C++

Восстановить пароль Регистрация
 
 
Alexandra7
0 / 0 / 0
Регистрация: 24.06.2014
Сообщений: 19
24.06.2014, 18:25     Чтение из файла #1
Здравствуйте, прошу помощи... Я только начала изучение, поэтому еще слишком плохо разбираюсь даже в элементарных вещах, прошу не судить строго...

Было определенное задание, выполнила я его используя свои знания, а они очень малы, как я уже говорила. Код хоть и выглядит ужасно, но работает, и в принципе отвечает требованиям.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
 
 
void func()
{
    char a [2]="1";
    char a1[2];
    char b [2]="2";
    char b1[2];
  cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
  cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
  cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*-"<< endl;
  cout << "\t\t\tYou are in the big room.\n\t\tAt centre of the room is swimming pool.\n\t\   You are see in the swimming pool an angry crocodile."<<endl<<endl;
  cout << "\n You are: (Please select '1' or '2', and press \"Enter\")"<< endl << endl;
  cout << "    (1)   Go away from the room.           (2)   Approach to the swimming pool."<< endl << endl;   
  
  cin.getline(a1, 2);
    
  if(strcmp (a1, b) == 0){
        cout << "\n\n You are see the crocodile, and you realizen what that is the most bloodthirsty \t of all the crocodile.\n\n";
        cout << " Your actions:  (Please select '1' or '2', and press \"Enter\") " << endl << endl;
        cout << " (1) You're cute, you're running out of room.\n"; 
        cout << " (2) You're crazy, you're poke him in the eye by thumb of your left leg.\n";
    
        cin.getline(b1, 2);
    
            if (strcmp (b1, b) == 0){
            cout << "\n\n Crocodile bitten your leg. You haven't could go, crocodile have eaten you all.\n"<< endl << endl;
            cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
            cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
            cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*-";
            system("pause");
            }
            else func();
    
        }
    }
    
 
int main(void)
{
 
    func();
    return 0;
    system("PAUSE");    
}

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

Источником информации для нее служит текстовый файл определенной структуры (xml, json, что-то свое, что угодно еще), которую необходимо создать разработчику"

Что это имеют ввиду? Не совсем понимаю, как это надо было делать...если кто может, подскажите. Заранее благодарна..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2014, 18:25     Чтение из файла
Посмотрите здесь:

Чтение из файла C++
C++ Чтение из файла.
C++ Чтение из файла
C++ Чтение файла
Чтение из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alexandra7
0 / 0 / 0
Регистрация: 24.06.2014
Сообщений: 19
25.06.2014, 14:19  [ТС]     Чтение из файла #21
Цитата Сообщение от LifeMoroz Посмотреть сообщение
Меня тут осенило, а вы как файлик то создали?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>
using namespace std;
 
int main(int argc, char* argv[]){
ofstream F("croco.txt");
F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*-\n";
F << "\t\t\tYou are in the big room.\n\t\tAt centre of the room is swimming pool.\n\t\   You are see in the swimming pool an angry crocodile.\n\n\n You are: (Please select '1' or '2', and press \"Enter\")\n\n";
F << "    (1)   Go away from the room.           (2)   Approach to the swimming pool.\n\n";   
F << "\n\n You are see the crocodile, and you realizen what that is the most bloodthirsty \t of all the crocodile.\n\n";
F << " Your actions:  (Please select '1' or '2', and press \"Enter\") \n\n";
F << " (1) You're cute, you're running out of room.\n"; 
F << " (2) You're crazy, you're poke him in the eye by thumb of your left leg.\n";
F << "\n\n Crocodile bitten your leg. You haven't could go, crocodile have eaten you all.\n\n\n";
F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*-";
F.close();
system("pause");
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LifeMoroz
11 / 11 / 3
Регистрация: 12.10.2013
Сообщений: 54
25.06.2014, 14:24     Чтение из файла #22
А добавьте еще последнюю версию "читающего" кода. Будет совсем хорошо)
Alexandra7
0 / 0 / 0
Регистрация: 24.06.2014
Сообщений: 19
25.06.2014, 14:29  [ТС]     Чтение из файла #23
Цитата Сообщение от LifeMoroz Посмотреть сообщение
А добавьте еще последнюю версию "читающего" кода. Будет совсем хорошо)
Даже страшно....я ведь почти ничего не меняла....
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <string.h>
#include <fstream>
#include <stdlib.h>
using namespace std;
 
void func()
{
    ifstream data("D:\\Новая папка (2)\\Crocodile\\croco.txt");
    
    if(!data)
    {
          cout<<"iput file file.dat open error"<<endl;
          
          system("pause");
    }
    char a[100];
    //cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
  //cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
  //cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*-"<< endl;
  //cout << "\t\t\tYou are in the big room.\n\t\tAt centre of the room is swimming pool.\n\t\   You are see in the swimming pool an angry crocodile."<<endl<<endl;
  //cout << "\n You are: (Please select '1' or '2', and press \"Enter\")"<< endl << endl;
  //cout << "    (1)   Go away from the room.           (2)   Approach to the swimming pool."<< endl << endl;  
  for(int i=1;i<=6;i++)// чтение и вывод заголовка из файла
  {
       data.getline(a,100);
       cout<<data;
  } 
  char b[4][100];
  for(int i=0;i<4;i++)// чтение 1 ситуации из файла
  {
       data.getline(b[i],100);
  } 
  char c[4][100];
  for(int i=0;i<4;i++)// чтение 2 ситуации из файла
  {
       data.getline(c[i],100);
  } 
  char a1[2] = "1";  
  cin.getline(a1, 2);
  if(strcmp (a1, "1") == 0)
  {
      for(int i=0;i<4;i++)// вывод 1 ситуации
            cout<<b[i]; 
       //cout << "\n\n You are see the crocodile, and you realizen what that is the most bloodthirsty \t of all the crocodile.\n\n";
        //cout << " Your actions:  (Please select '1' or '2', and press \"Enter\") " << endl << endl;
        //cout << " (1) You're cute, you're running out of room.\n"; 
        //cout << " (2) You're crazy, you're poke him in the eye by thumb of your left leg.\n";
  }else
  {   
      for(int i=0;i<4;i++)// вывод 2 ситуации
            cout<<c[i]; 
         //cout << "\n\n Crocodile bitten your leg. You haven't could go, crocodile have eaten you all.\n"<< endl << endl;
         //cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
         //cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
         //cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*-";
  }
// и т.д.
} 
 
int main () {
    func();
    return 0;
    system("PAUSE");
}
LifeMoroz
11 / 11 / 3
Регистрация: 12.10.2013
Сообщений: 54
25.06.2014, 14:33     Чтение из файла #24
Цитата Сообщение от Alexandra7 Посмотреть сообщение
ifstream data("D:\\Новая папка (2)\\Crocodile\\croco.txt");
Вот это мне очень не нравится, вы нигде не указали setlocale(LC_ALL, "Rus"); Поэтому русская кодировка не лучшая идея, уберите из пути все русское (Например в корень D: закиньте) и просто на всякий случай пропишите аналогичный абсолютный путь и в "добавлении"
Alexandra7
0 / 0 / 0
Регистрация: 24.06.2014
Сообщений: 19
25.06.2014, 14:39  [ТС]     Чтение из файла #25
Цитата Сообщение от LifeMoroz Посмотреть сообщение
Вот это мне очень не нравится, вы нигде не указали setlocale(LC_ALL, "Rus"); Поэтому русская кодировка не лучшая идея, уберите из пути все русское (Например в корень D: закиньте) и просто на всякий случай пропишите аналогичный абсолютный путь и в "добавлении"
Спасибо, но к сожалению ничего не изменилось...
LifeMoroz
11 / 11 / 3
Регистрация: 12.10.2013
Сообщений: 54
25.06.2014, 14:46     Чтение из файла #26
А еще можно попробовать выводить не поток, а строку )))
for(int i=1;i<=6;i++)// чтение и вывод заголовка из файла
{
data.getline(a,100);
cout<<a;
}
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
25.06.2014, 14:47     Чтение из файла #27
Цитата Сообщение от LifeMoroz Посмотреть сообщение
setlocale(LC_ALL, "Rus");
Это не поможет. Русское в исходнике плохо тем, что кодировка файла может измениться, скажем исходник в 1251, а файловая система ожидает имена в utf-8. А setlocale не касается имен файлов, только ввода\вывода. Проще говоря локаль и кодировка исходного файла - это разные вещи.

Проблема же ТС похоже в том, что количество строк в файле не соответствует ожидаемому. В генераторе файла не хватает \n в некоторых местах. Поэтому нули выводятся.
LifeMoroz
11 / 11 / 3
Регистрация: 12.10.2013
Сообщений: 54
25.06.2014, 14:52     Чтение из файла #28
А кто говорил о кодировке исходного файла?
Я имел ввиду, что путь к файлику может резко оказаться не тем, который ожидается
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
25.06.2014, 14:59     Чтение из файла #29
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от LifeMoroz Посмотреть сообщение
А кто говорил о кодировке исходного файла?
Ты говорил.
Цитата Сообщение от LifeMoroz Посмотреть сообщение
уберите из пути все русское
Путь прописан в исходном файле. Этот файл имеет свою кодировку, скорее всего это 1251. Упоминание setlocale говорит о том, что у тебя существует заблуждение по поводу влияния локали на пути файлов. Хотя в данном случае влияет не локаль, а кодировка, в которой записан cpp. Так яснее?

Alexandra7, вот файл на котором заработало. Еще есть ошибка в коде, где считывается файл: написано
C++
1
 cout << data;
, а надо
C++
1
cout << a;
в первом цикле.
Вложения
Тип файла: txt croco.txt (1.1 Кб, 3 просмотров)
LifeMoroz
11 / 11 / 3
Регистрация: 12.10.2013
Сообщений: 54
25.06.2014, 15:04     Чтение из файла #30
Переписал считывание:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int main(int argc, char* argv[]){
    ofstream F("input.txt");
    F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*\n";
    F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*\n";
    F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*-\n";
    F << "You are in the big room.\nAt centre of the room is swimming pool.\n   You are see in the swimming pool an angry crocodile.\n\n\n You are: (Please select '1' or '2', and press \"Enter\")\n\n";
    F << "    (1)   Go away from the room.           (2)   Approach to the swimming pool.\n\n";   
    F << "\n\n You are see the crocodile, and you realizen what that is the most bloodthirsty of all the crocodile.\n\n";
    F << " Your actions:  (Please select '1' or '2', and press \"Enter\") \n\n";
    F << " (1) You're cute, you're running out of room.\n"; 
    F << " (2) You're crazy, you're poke him in the eye by thumb of your left leg.\n";
    F << "\n\n Crocodile bitten your leg. You haven't could go, crocodile have eaten you all.\n\n\n";
    F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*\n";
    F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*\n";
    F << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*-";
    F.close();
    ifstream iF("input.txt");
    char a[256];
    while(!iF.eof()) {
        iF.getline(a, 256);
        cout << a << endl;
    }
return 0;
}
Alexandra7
0 / 0 / 0
Регистрация: 24.06.2014
Сообщений: 19
25.06.2014, 15:07  [ТС]     Чтение из файла #31
Цитата Сообщение от DrOffset Посмотреть сообщение
Alexandra7, вот файл на котором заработало. Еще есть ошибка в коде, где считывается файл: написано
Действительно, работает, правда немного не так как надо пока, но по-крайней мере уже открывается!
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
25.06.2014, 15:10     Чтение из файла #32
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Alexandra7, Вообще, похоже нужно поменять еще чуть побольше. Хотя бы потому, что ширина консоли 80 символов, а не 100.
А первый цикл должен быть таким:
C++
1
2
3
4
5
6
    
for(int i=0; i < 10; i++) // чтение и вывод заголовка из файла
{
    data.getline(a, 80);
    cout << a << '\n';
}
Остальное по аналогии. Файл можно редактировать из любого блокнота, так проще. Вариант файла во вложении.

PS. Вообще конечно завязываться на определенное количество строк в файле не очень хорошо. Скажем, если попадется файл с меньшим числом строк - программа упадет.
Вложения
Тип файла: txt croco.txt (1.1 Кб, 2 просмотров)
Alexandra7
0 / 0 / 0
Регистрация: 24.06.2014
Сообщений: 19
25.06.2014, 18:13  [ТС]     Чтение из файла #33
Все исправила в программе, теперь она выполняет все условия, но только выдает в конце вот такую ошибку:
Run-Time Check Failure #2 - Stack around the variable 'condition3' was corrupted;

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <string.h>
#include <fstream>
#include <stdlib.h>
using namespace std;
 
void func()
{
    ifstream file("F:\\croco.txt");
    
    if(!file)
        {
          cout << "Input file croco.txt open error." << endl;
          system("pause");
        }
    char condition[100];
   
  /*cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
  cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
  cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*-"<< endl;
  cout << "\t\t\tYou are in the big room.\n\t\tAt centre of the room is swimming pool.\n\t\   You are see in the swimming pool an angry crocodile."<<endl<<endl;
  cout << "\n You are: (Please select '1' or '2', and press \"Enter\")"<< endl << endl;
  cout << "    (1)   Go away from the room.           (2)   Approach to the swimming pool."<< endl << endl;*/
  
    for(int i=0; i < 10; i++) // чтение и вывод заголовка из файла
        {
          file.getline(condition, 80);
          cout << condition << '\n';
        }
  
  char condition2 [7][100];
  for(int i=0; i <= 7; i++) // чтение 2 условия из файла
      {
         file.getline(condition2 [i],100);
      } 
  char condition3 [6][100];
  for(int i=0; i <= 6; i++) // чтение 3 условия из файла
      {
         file.getline(condition3 [i],100);
      } 
  char choice1[2] ;  
  cin.getline(choice1, 2);
  if(strcmp (choice1, "2") == 0)
      {
         for(int i=0; i <= 7; i++) // вывод 2 условия
         cout << condition2 [i] << '\n'; 
            /*cout << "\n\n You are see the crocodile, and you realizen what that is the most bloodthirsty \t of all the crocodile.\n\n";
            cout << " Your actions:  (Please select '1' or '2', and press \"Enter\") " << endl << endl;
            cout << " (1) You're cute, you're running out of room.\n"; 
            cout << " (2) You're crazy, you're poke him in the eye by thumb of your left leg.\n";*/
      }
  else 
      {
       return;
      }
  
  char choice2[2] ;
  cin.getline(choice2, 2);
  if(strcmp (choice2, "2") == 0)
      {
         for(int i=0; i <= 6; i++) // вывод 3 условия
         cout << condition3 [i] << '\n'; 
           /*cout << "\n\n Crocodile bitten your leg. You haven't could go, crocodile have eaten you all.\n"<< endl << endl;
           cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
           cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
           cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*-";*/
      }
  else 
      {
       func ();
      }
 } 
 
 
int main () {
    func();
    //return 0;
    system("PAUSE");
}
Как я понимаю, это тип не соответствует? То есть он слишком мал, или нет? Как можно решить подобную проблему?

Добавлено через 40 минут
Вышла за пределы массива? А где, и как это исправить.....
LifeMoroz
11 / 11 / 3
Регистрация: 12.10.2013
Сообщений: 54
25.06.2014, 19:11     Чтение из файла #34
C++
1
char condition3 [6][100]
Обращаетесь по несуществующему адресу
в цикле
C++
1
2
3
4
5
6
7
for(int i=0; i <= 6; i++) // вывод 3 условия
         cout << condition3 [i] << '\n'; 
           /*cout << "\n\n Crocodile bitten your leg. You haven't could go, crocodile have eaten you all.\n"<< endl << endl;
           cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
           cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*";
           cout << "*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*-";*/
      }
condition[6] не существует
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2014, 21:24     Чтение из файла
Еще ссылки по теме:

Чтение из файла. Повторное чтение файла C++
Чтение из файла C++
Чтение файла с несколькими знаками конца файла C++

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

Или воспользуйтесь поиском по форуму:
Alexandra7
0 / 0 / 0
Регистрация: 24.06.2014
Сообщений: 19
25.06.2014, 21:24  [ТС]     Чтение из файла #35
Цитата Сообщение от LifeMoroz Посмотреть сообщение
Обращаетесь по несуществующему адресу
в цикле
Ой, да, и при чем два раза, и в condition2 и в condition3. Спасибо!
Yandex
Объявления
25.06.2014, 21:24     Чтение из файла
Ответ Создать тему
Опции темы

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