Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
1

Чтение вопросов теста из файла

09.04.2017, 10:04. Просмотров 789. Ответов 22
Метки нет (Все метки)

Вот сам код
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
// Универсальная программа проверки знаний 
 
#include "stdafx.h"
#include <iostream>
#include <cstddef>
#include <cstring>
#include <stdlib.h>
#include <stdio.h> 
#include <conio.h>
#include <string.h>
 
using namespace std;
void main(int argc, char* argv[])
{
    char fname[40]; // имя файла теста
    FILE* f;// файл теста
    f = fopen("fname.txt", "rt");
    int VsegoVopr = 0; // количество вопросов теста
    int PravOtv = 0; // количество правильных ответов
                     // для текущего вопроса272 Часть I
    int nOtv; // количество альтернативных ответов
    int Prav; // номер правильного ответа
    int Otv; // номер ответа, выбранного пользователем
    int p; // процент правильных ответов
    char st[80]; // строка файла теста
    int i; // счетчик циклов
    if (!argc)
    {
        puts("\nНе задан файл вопросов теста!");
        puts("Командная строка: test ИмяФайлаТеста\n");
        return;
    }
    strcpy_s(fname, argv[1]); // имя файла из командной строки
    if (f!=NULL) // Открыть файл в режиме чтения (r) текста (t)
    {
        printf("Ошибка открытия файла %s", fname);
        system("pause");
        return;
    }
    system("cls");
    puts("\nСейчас Вам будет предложен тест.");
    puts("К каждому вопросу дается несколько вариантов ответа.");
    puts("Вы должны ввести номер правильного ответа");
    puts("и нажать клавишу <Enter>\n");
    printf("Для начала тестирования нажмите <Enter>");
    system("pause");
    //textbackground(BLUE);
    system("cls");
    while (!feof(f))
    {
        VsegoVopr++;
        fgets(st, 80, f); // читаем из файла вопрос
        printf("\n%s\n", st); // вопрос на экран
        fscanf_s(f, "%i %i", &nOtv, &Prav);// кол-во вариантов
                                           // ответа
                                           // и номер прав. ответа
        fgets(st, 80, f); // дочитать конец предыдущей строки
                          //читаем и выводим альтернативные ответы
        for (i = 1; i <= nOtv; i++)
        {
            fgets(st, 80, f);
            printf("%i. %s", i, st);
        }
        printf("\nВаш выбор ->");
        scanf_s("%i", &Otv);
        if (Otv == Prav) PravOtv++;
    }
    // обработка результата тестирования
    // вычислим процет правильных ответов
    p = 100 * PravOtv / VsegoVopr;
    printf("\nВаша оценка - ");
    if (p == 100) puts("ОТЛИЧНО!");
    if (p >= 99 && p <= 80) puts("ХОРОШО.");
    if (p >= 60 && p <= 79) puts("УДОВЛЕТВОРИТЕЛЬНО.");
    if (p < 60) puts("ПЛОХО!\n");
    puts("\nДля завершения нажмите <Enter>");
    system("pause");
}
Не хочет работать

Добавлено через 27 минут
Вот убрал все ошибки, пишет что fopen_s: функция не принимает 2 аргументов
Вот код:
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
// Универсальная программа проверки знаний 
// имя файла теста задается в инструкции запуска программы
#include "stdafx.h"
#include <iostream>
#include <cstddef>
#include <fstream>
#include <stdlib.h>
#include <stdio.h> 
#include <conio.h>
#include <string.h.>
#include <cstdlib>
 
using namespace std;
 
void main(int argc, char* argv[])
{
    char fname[40]; // имя файла теста
    FILE* f; // файл теста
    int VsegoVopr = 0; // количество вопросов теста
    int PravOtv = 0; // количество правильных ответов
                     // для текущего вопроса
    int nOtv; // количество альтернативных ответов
    int Prav; // номер правильного ответа
    int Otv; // номер ответа, выбранного пользователем
    int p; // процент правильных ответов
    char st[80]; // строка файла теста
    int i; // счетчик циклов
    if (!argc)
    {
        puts("\nНе задан файл вопросов теста!");
        puts("Командная строка: test ИмяФайлаТеста\n");
        return;
    }
    strcpy_s(fname, argv[1]); // имя файла из командной строки
                            // Открыть файл в режиме чтения (r) текста (t) 
    if ((f = fopen_s(fname, "rt")) == NULL)
    {
        printf("Ошибка открытия файла %s", fname);
        _getch();
        return;
    }
    system("cls");
    puts("\nСейчас Вам будет предложен тест.");
    puts("К каждому вопросу дается несколько вариантов ответа.");
    puts("Вы должны ввести номер правильного ответа");
    puts("и нажать клавишу <Enter>\n");
    printf
    ("Для начала тестирования нажмите <Enter>");
    _getch();
    
        system("cls");;
    while (!feof(f))
    {
        VsegoVopr++;
        fgets(st, 80, f); // читаем из файла вопрос
        printf("\n%s\n", st); // вопрос на экран
        fscanf_s(f, "%i %i", &nOtv, &Prav);// кол-во вариантов
                                         // ответа
                                         // и номер прав. ответа
        fgets(st, 80, f); // дочитать конец предыдущей строки
                          //читаем и выводим альтернативные ответы
        for (i = 1; i <= nOtv; i++)
        {
            fgets(st, 80, f);
            printf("%i. %s", i, st);
        }
        printf("\nВаш выбор ->");
        scanf_s("%i", &Otv);
        if (Otv == Prav) PravOtv++;
    }
    // обработка результата тестирования
    // вычислим процет правильных ответов
    p = 100 * PravOtv / VsegoVopr;
    printf("\nВаша оценка - ");
    if (p == 100) puts("ОТЛИЧНО!");
    if (p >= 99 && p <= 80) puts("ХОРОШО.");
    if (p >= 60 && p <= 79) puts("УДОВЛЕТВОРИТЕЛЬНО.");
    if (p < 60) puts("ПЛОХО!\n");
    puts("\nДля завершения нажмите <Enter>");
    _getch();
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2017, 10:04
Ответы с готовыми решениями:

Чтение файла, как сделать прогон по всем строкам файла
Вот вообщем задание: Составить текстовый файл, состоящий из нескольких строк...

Чтение текста из файла и удаление файла
Всем привет! помогите плз решить проблемку. Написал прогу которая должна...

чтение из файла
Проблема с циклом, не понимаю как сделать так, чтобы программа считает каждую...

Чтение файла
При бинарном чтение из файла записывает мусор в 1 коэффициент,остальное все...

Чтение файла
Почему ничего не выводится в мейне по указателю pReadData, а в функции...

22
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
10.04.2017, 00:13  [ТС] 21
Написать программу, при помощи которой можно автома-
тизировать процесс проверки знаний. Тест, последовательность
вопросов и вариантов ответа, должен находиться в текстовом
файле. Имя файла теста программа должна получать из
ной строки ее запуска. Количество вопросов теста не ограничено.
Вместе с тем предлагается ввести следующее ограничение: текст
вопроса и альтернативных ответов не должен занимать более од-
ной строки экрана.
Программа должна выставлять оценку по следующему правилу:
отлично — за правильные ответы на все вопросы, хорошо — если
испытуемый правильно ответил не мене чем на 80% вопросов, удов-
летворительно — если правильных ответов более 60%, и неудов-
летворительно — если правильных ответов меньше 60%.
Ниже приведена рекомендуемая структура файла теста (Ni — ко-
личество вариантов ответа к i-му вопросу, Ki — номер правиль-
ного ответа), пример файла теста и вид экрана во время работы
программы (номера ответов, введенные пользователем, выделены
полужирным).
вот код написал ну он не работает
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
#include "iostream"
#include <fstream>
#include <locale.h>
#include "windows.h"
#include "stdio.h" 
#include "conio.h" 
#include "string.h" 
void main(int argc, char* argv[])
{
    char fname[40]; // имя файла теста
    FILE* f = fopen ("D:\\file\\fname", "rt"); // файл теста
    int VsegoVopr = 0; // количество вопросов теста
    int PravOtv = 0; // количество правильных ответов
                     // для текущего вопроса
    int nOtv; // количество альтернативных ответов
    int Prav; // номер правильного ответа
    int Otv; // номер ответа, выбранного пользователем
    int p; // процент правильных ответов
    char st[80]; // строка файла теста
    int i; // счетчик циклов
    setlocale(LC_ALL, "Rus");
    if (!argc)
    {
        puts("\nНе задан файл вопросов теста!");
        puts("Командная строка: test ИмяФайлаТеста\n");
        return;
    }
    strcpy_s(fname, argv[1]); // имя файла из командной строки
                            // Открыть файл в режиме чтения (r) текста (t) 
    if ((f = fopen(fname, "rt")) == 0)
    {
        printf("Ошибка открытия файла %s", fname);
        _getch();
        return;
    }
    //system(cls);
    puts("\nСейчас Вам будет предложен тест.");
    puts("К каждому вопросу дается несколько вариантов ответа.");
    puts("Вы должны ввести номер правильного ответа");
    puts("и нажать клавишу <Enter>\n");
    printf
    ("Для начала тестирования нажмите <Enter>");
    _getch();
    
        //system(cls);
    while (!feof(f))
    {
        VsegoVopr++;
        fgets(st, 80, f); // читаем из файла вопрос
        printf("\n%s\n", st); // вопрос на экран
        fscanf_s(f, "%i %i", &nOtv, &Prav);// кол-во вариантов
                                         // ответа
                                         // и номер прав. ответа
        fgets(st, 80, f); // дочитать конец предыдущей строки
                          //читаем и выводим альтернативные ответы
        for (i = 1; i <= nOtv; i++)
        {
            fgets(st, 80, f);
            printf("%i. %s", i, st);
        }
        printf("\nВаш выбор ->");
        scanf_s("%i", &Otv);
        if (Otv == Prav) PravOtv++;
    }
    // обработка результата тестирования
    // вычислим процет правильных ответов
    p = 100 * PravOtv / VsegoVopr;
    printf("\nВаша оценка - ");
    if (p == 100) puts("ОТЛИЧНО!");
    if (p >= 99 && p <= 80) puts("ХОРОШО.");
    if (p >= 60 && p <= 79) puts("УДОВЛЕТВОРИТЕЛЬНО.");
    if (p < 60) puts("ПЛОХО!\n");
    puts("\nДля завершения нажмите <Enter>");
    _getch();
}
0
Antikl
с++
315 / 304 / 158
Регистрация: 15.07.2015
Сообщений: 1,615
Завершенные тесты: 6
10.04.2017, 05:55 22
что именно не работает ?
0
zss
Модератор
Эксперт С++
7769 / 7004 / 4396
Регистрация: 18.12.2011
Сообщений: 18,523
Завершенные тесты: 1
10.04.2017, 07:47 23
А подсказку по strcpy_s нажав F1 не пробовали посмотреть?
К тому же я Вам уже такую строку исправлял
C
1
strcpy_s(fname, 40,argv[1]);
strcpy и strcpy_s это разные функции, и параметры у них отличаются.

Добавлено через 12 минут
Цитата Сообщение от Burgo Посмотреть сообщение
#include "iostream"
#include <fstream>
Где Вы это используете?
и почему "iostream" в кавычках?
0
10.04.2017, 07:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2017, 07:47

Чтение из файла
Нужно открыть файл и прочитать каждую из строк запомнив каждую как отдельную...

Чтение записей из файла
Добрый день! Мучался с конфигурацией телефонов, нужно было забить в панель...

Чтение построчно из файла
В параметрах командной строки задано имя текстового файла, в каждой строке...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

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