Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 05.07.2016
Сообщений: 2

Работа с файлами в C/C++

05.07.2016, 17:29. Показов 2285. Ответов 3

Студворк — интернет-сервис помощи студентам
Всем добрый вечер.
Ваш форум часто помогал мне, я находил ответы на многие свои вопросы. На сей раз я затупил конкретно.
Задание - написать простейшую игру "Виселица", суть которой состоит в посимвольном отгадывании зашифрованного слова.
Есть уже написанная мною и даже рабочая программа (прилагается).
Сложность у меня вызывало то, что нужно создать файл, из которого программа будет брать загадываемые слова. Она должна случайным образом выбрать одно слово из файла и считать его. Слова в файле должны быть расположены в столбик (для удобства дальнейшей работы с ними, ибо будет пилиться оконное приложение с возможностью дополнения этой базы слов).
Вроде кажется нетрудным, но уже в течение нескольких дней не могу реализовать решение.
Можете направить на путь истинный, пожалуйста?
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <stdio.h>
#include <string.h>
#include <string>
#include <stdlib.h>
#include <time.h>
#include <iostream>
 
int main()
{
    int r=0,q=0,e=0,*w,l,a,i,u=0,j,repeat=0;
    char b;
    char *s1, **s;
    w=new int[q];
    s=new char*[5];              //
    s[0]="ТРИГИДРОФОСФАТ";       //  Вот этот кусок
    s[1]="СИНХРОФАЗОТРОН";       //  нужно заменить
    s[2]="ДЕСЕПТИКОН";           //  на чтение из файла
    s[3]="ПОПКОРН";              //
    s[4]="ДЕСИНХРОНИЗАЦИЯ";      //
//--------------------------------------------------------------------------
    printf("\t\tДобро пожаловать в игру 'Виселица'");
    printf("\n\t\t  Выберите уровень сложности:\n"       // Здесь выбирается
             "\t\t       1 - лёгкий\n"                   //  сложность игры
             "\t\t       2 - средний\n"
             "\t\t       3 - тяжёлый\n");
    printf("\n");
    scanf("%d",&j);
    printf("\n");
    if (j==1) e=7;
    if (j==2) e=5;
    if (j==3) e=3;
//--------------------------------------------------------------------------
    srand(time(NULL));
    a=rand()%4;         // Выбирает случайную строку
    l=strlen(s[a]);     // Длина выбранной строки
    s1=new char[l];
    for (i=0;i<l;i++)   // Создание другого массива, состоящего из
        s1[i]='-';      //              прочерков
    for (i=0;i<l;i++)
    printf("%c",s1[i]); // Вывод его на экран
    printf("\n");
//--------------------------------------------------------------------------
    while ((e>(-1)) && (u!=l)) // Пока есть попытки и слово не отгадано
    {                          // (т.е. кол-во отгаданных символов не равно длине слова)
        fflush(stdin);
        printf("Введите символ: ");
        scanf("%c",&b);
        printf("\n");
        for (j=0;j<l;j++)  //  Проверка на повторы
            if (s1[j]==b)  //
                repeat++;  //
        if (repeat==0)     //   Если повторов нет,
        {                  // то выполняем этот цикл
        for(i=0;i<l;i++)
        {
            if (s[a][i]==b)
            {
                r++;    // Индикатор который показывет, угадан символ или нет
                        // (т.е. выполнять замену символов в массиве с прочерками или нет)
                w[q]=i; // Заполнение массива, который содержит
                q++;    // номера элементов которые нужно замаенить в массиве
            }           // с прочерками если введенный пользовательм символ
        }               // содержится в искомом слове
        if (r>0)
        {
            for (i=0;i<q;i++)
            {
                s1[w[i]]=b;
                u++;
            }
            puts(s1);
            printf("\n");
            //ниже идет обнуление для следующего шага
            for (i=0;i<q;i++)
                w[i]=0;
            q=0;
            r=0;
 
        }
        else  // Если буквы нет в загаданном слове
        {
                if (e>=0)
                {
                e--;
                printf("Такой буквы нет. Осталось попыток - %d\n\n\n",e);
                puts(s1);
                }
                if (e<0)
                {
                    e--;
                    printf("Попыток не осталось\n\n\n");
                    puts(s1);
                    //   Здесь добавить отрисовку
                    // очередного элемента виселицы
                }
        }
        }
        else  // Если есть повторы, ты выдаем вот это
        {
            if (e>=0)
            {
                e--;
                printf("Такой символ уже введён. Осталось попыток - %d\n\n\n",e);
                puts(s1);
                repeat=0;
            }
            if (e<0)
            {
                e--;
                printf("Попыток не осталось\n\n\n");
                puts(s1);
                //   Здесь добавить отрисовку
                // очередного элемента виселицы
            }
        }
    }
 
    if (u==l)
    {
        printf("\nwin\n");
    }
    else
    {
        printf("\nlose\n\n");
        printf("Искомое слово - ");
        puts(s[a]);
    }
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.07.2016, 17:29
Ответы с готовыми решениями:

Работа с файлами , хотелось бы с windows system файлами
всем привет, нужна интересная идея по программированию, работа с файлами , хотелось бы с windows system файлами, у вас есть какая-то идея?...

Работа с файлами(Запись,чтение,работа с данными)
Здравствуйте, никак не могу осилить файлы... Для начала вот само задание: В справочной автовокзала хранится расписание движения автобусов....

Лабораторная работа №5. Работа с файлами и алгоритмы сортировки
1. Написать функцию Load для считывания из текстового файла (например, Workers.txt) информации о работниках и заработной плате. В первой...

3
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
05.07.2016, 17:33
Лучший ответ Сообщение было отмечено BOPOHOK как решение

Решение

Загрузить все слова, потом выбрать нужное. Читать только одно слово не получится, если вы не готовы делать все строки файла одинаковой длины.
C++
1
2
3
4
5
std::vector<std::string>dict;
std::string temp;
for(std::ifstream stream("test.txt");stream>>temp;)
    dict.push_back(temp);
std::cout<<dict[rand()%dict.size()];
1
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
05.07.2016, 22:48
Цитата Сообщение от BOPOHOK Посмотреть сообщение
случайным образом выбрать одно слово из файла и считать его. Слова в файле должны быть расположены в столбик
Создайте вспомогательный индексный файл из записей вида {WordOffset; WordSize}, из которого случайным образом будете выбирать текущую запись. Сами слова могут быть записаны как угодно - хоть в столбик, хоть в строчку. (Лучший вариант, разделить их нулем (0x00) и отобразить файл в память, без всяких <iostream>)

Таким образом, ваша "база" будет состоять из двух файлов: .DIC (собственно список слов) и .IDX (вспомогательный индексный файл). (Пере)индексация должна производиться при каждом обновлении списка слов.
1
0 / 0 / 0
Регистрация: 05.07.2016
Сообщений: 2
06.07.2016, 00:45  [ТС]
В итоге все решилось куда проще. Тупее, но проще. Спасибо тем, кто откликнулся.
C++ (Qt)
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include <stdio.h>
#include <string.h>
#include <string>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <fstream>
#include <locale>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
    int r=0,q=0,e=0,*w,l,a,i,u=0,j,repeat=0;
    char b;
    char *s1;
    w=new int[q];
    const int N=256; //Константный размер строки
    const char *FName ="add_words.txt"; //Путь к файлу;
    int count=0;
    srand(time(NULL));
    a=rand()%9;
    char s[256];
    char S[N]={""}; //В S будут считываться строки
    ifstream file(FName); //Открыли файл для чтения
   while (!file.eof()) //Будем читать информацию пока не дойдем до конца файла
     {
       file.getline(S,N); //Построчное считывание информации в S
       if (count==a)
           strcpy(s,S);
       count++;
     }
     file.close();  //Закрыли открытый файл
//--------------------------------------------------------------------------
    printf("\t\tДобро пожаловать в игру 'Виселица'");
    printf("\n\t\t  Выберите уровень сложности:\n"  // Здесь выбирается
             "\t\t       1 - лёгкий\n"                   //  сложность игры
             "\t\t       2 - средний\n"
             "\t\t       3 - тяжёлый\n");
    printf("\n");
    scanf("%d",&j);
    printf("\n");
    if (j==1) e=5;
    if (j==2) e=4;
    if (j==3) e=3;
//--------------------------------------------------------------------------
    l=strlen(s);
    s1=new char[l];
    for (i=0;i<l;i++)
        s1[i]='-';
    for (i=0;i<l;i++)
    printf("%c",s1[i]);
    printf("\n");
//--------------------------------------------------------------------------
    while ((e>(-1)) && (u!=l))
    {
        fflush(stdin);
        printf("Введите символ: ");
        scanf("%c",&b);
        printf("\n");
        for (j=0;j<l;j++)  //  Проверка на повторы
            if (s1[j]==b)  //
                repeat++;  //
        if (repeat==0)     //   Если повторов нет,
        {                  // то выполняем этот цикл
        for(i=0;i<l;i++)
        {
            if (s[i]==b)
            {
                r++;
                w[q]=i;
                q++;
            }
        }
        if (r>0)
        {
            for (i=0;i<q;i++)
            {
                s1[w[i]]=b;
                u++;
            }
            puts(s1);
            printf("\n");
            //ниже идет обнуление для следующего шага
            for (i=0;i<q;i++)
                w[i]=0;
            q=0;
            r=0;
 
        }
        else  // Если буквы нет в загаданном слове
        {
                e--;
                printf("Такой буквы нет. Осталось попыток - %d\n\n\n",e);
                puts(s1);
                //   Здесь добавить отрисовку
                // очередного элемента виселицы
        }
        }
        else  // Если есть повторы, ты выдаем вот это
        {
            e--;
            printf("Такой символ уже введён. Осталось попыток - %d\n\n\n",e);
            puts(s1);
            repeat=0;
            //   Здесь добавить отрисовку
            // очередного элемента виселицы
        }
    }
 
    if (u==l)
    {
        printf("\nwin\n");
    }
    else
    {
        printf("\nlose\n");
        printf("Искомое слово - ");
        puts(s);
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.07.2016, 00:45
Помогаю со студенческими работами здесь

Работа с файлами, чтение/работа со строкой
Доброго времени суток. Начал работать с C++ Builder 6. Есть текстовый файл .txt с различными строками, как можно производить...

Работа с файлами
fout = open(&quot;out.txt&quot;,&quot;w&quot;) i = 1 for s in open(&quot;int.txt&quot;): ball = int(s.split(&quot; &quot;)) karr = int(s.split(&quot; &quot;)) larr =...

Работа с файлами
Помогите пожалуйста найти сумму чётных элементов файла, содержащего целые числа

Работа с файлами
Почему он вызывает исключение, файл я создал почему он пишет что считывать его нельзя( Помогите пожайлуста, я хочу чтобы я могу вводить...

Работа с файлами
Помогите пожалуйста в работе с фалами Разработать программу, которая: а) создает текстовый файл F_1 с символьных строк различной...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru