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

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

09.04.2017, 10:04. Просмотров 793. Ответов 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
DemolitionMan
130 / 156 / 87
Регистрация: 06.04.2016
Сообщений: 992
09.04.2017, 10:15 2
А куда обычный fopen() подевался?

Добавлено через 5 минут
А, ну да, это функция для 3 аргументов.
0
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
09.04.2017, 10:18  [ТС] 3
Вот заменил 36 строчку на такую
C++
1
if ((f = fopen(fname, "rt")) == NULL)
Выдало такое как на фото, почти постоянно открывает консоль (в нем ничего нету). Ошибку не выдает
0
Миниатюры
Чтение вопросов теста из файла  
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
09.04.2017, 10:38  [ТС] 4
Visual Studio открыл файл "string.h" и указал на функцию
C++
1
2
3
4
5
_DEFINE_CPP_OVERLOAD_SECURE_FUNC_0_1(
    errno_t, strcat_s,
           char,        _Destination,
    _In_z_ char const*, _Source
    )
0
zss
Модератор
Эксперт С++
7772 / 7007 / 4396
Регистрация: 18.12.2011
Сообщений: 18,528
Завершенные тесты: 1
09.04.2017, 10:40 5
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
// Универсальная программа проверки знаний 
// имя файла теста задается в инструкции запуска программы
//#include <iostream>
//#include <cstddef>
//#include <fstream>
//#include <stdlib.h>
#include <stdio.h> 
#include <conio.h>
#include <locale.h>
#include <string.h>
 
 
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; // счетчик циклов
    setlocale(LC_ALL,"Rus");
    if (!argc)
    {
        puts("\nНе задан файл вопросов теста!");
        puts("Командная строка: test ИмяФайлаТеста\n");
        return;
    }
    strcpy_s(fname, 40,argv[1]); // имя файла из командной строки
    // Открыть файл в режиме чтения (r) текста (t) 
    if ((f = fopen(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
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
09.04.2017, 10:44  [ТС] 6
Пишет
C++
1
2
3
4
5
1>------ Сборка начата: проект: test1, Конфигурация: Debug Win32 ------
1>test1.cpp
1>c:\users\kosty\documents\visual studio 2017\projects\test1\test1\test1.cpp(81): fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "stdafx.h"" в источник.
1>Сборка проекта "test1.vcxproj" завершена с ошибкой.
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Brain_Dead
9 / 8 / 3
Регистрация: 25.09.2013
Сообщений: 35
09.04.2017, 10:47 7
Цитата Сообщение от Burgo Посмотреть сообщение
Ошибку не выдает
C++
1
FILE* f; // файл теста
Надо бы инициализировать NULL, а то в блок обработки не сможет попасть.

C++
1
2
3
4
5
6
 if ((f = fopen_s(fname, "rt")) == NULL)
* * {
* * * * printf("Ошибка открытия файла %s", fname);
* * * * _getch();
* * * * return;
* * }
0
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
09.04.2017, 10:51  [ТС] 8
Делаю любые изменение, постоянно выдает, что нужно добавить директиву "#include "stdafx.h"" в источник.
0
zss
Модератор
Эксперт С++
7772 / 7007 / 4396
Регистрация: 18.12.2011
Сообщений: 18,528
Завершенные тесты: 1
09.04.2017, 12:18 9
Узнайте, наконец, для чего существует этот противный "stdafx.h".
Не удается открыть источник файл "stdafx.h
0
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
09.04.2017, 12:45  [ТС] 10
Ошибок нету, ну открывается консоль и там ничего нету.
Фото что открывает, и сам код:
Директиву "stdafx.h" отключил.
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
// Универсальная программа проверки знаний 
// имя файла теста задается в инструкции запуска программы
#include <iostream>
#include <cstddef>
#include <fstream>
#include <stdlib.h>
#include <stdio.h> 
#include <conio.h>
#include <locale.h>
#include <string.h>
 
 
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; // счетчик циклов
    setlocale(LC_ALL, "Rus");
    if (!argc)
    {
        puts("\nНе задан файл вопросов теста!");
        puts("Командная строка: test ИмяФайлаТеста\n");
        return;
    }
    strcpy_s(fname, 40, argv[1]); // имя файла из командной строки
                                  // Открыть файл в режиме чтения (r) текста (t) 
    if ((f = fopen(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
Миниатюры
Чтение вопросов теста из файла  
DemolitionMan
130 / 156 / 87
Регистрация: 06.04.2016
Сообщений: 992
09.04.2017, 12:51 11
Цитата Сообщение от Burgo Посмотреть сообщение
C++
1
FILE* f; // файл теста
- Вам советовали f занулить, т.е написать вот так:
C++
1
FILE* f = NULL;
Сделайте это, может поможет.
А что Вы вообще ожидаете от программы, если не чистый экран?
Пройдитесь дебаггером, посмотрите что внутри переменных.
0
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
09.04.2017, 13:02  [ТС] 12
Я не пойму, почему ничего не выводит.
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 <iostream>
#include <cstddef>
#include <fstream>
#include <stdlib.h>
#include <stdio.h> 
#include <conio.h>
#include <locale.h>
#include <string.h>
 
 
void main(int argc, char* argv[])
{
    char fname[40]; // имя файла теста
    FILE* f = NULL; // файл теста
    
    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, 40, argv[1]); // имя файла из командной строки
                                  // Открыть файл в режиме чтения (r) текста (t) 
    if ((f = fopen(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();
}
Вот сама задача:
Написать программу, при помощи которой можно автоматизировать
процесс проверки знаний. Тест, последовательность
вопросов и вариантов ответа, должен находиться в текстовом
файле. Имя файла теста программа должна получать из командной
строки ее запуска. Количество вопросов теста не ограничено.
Вместе с тем предлагается ввести следующее ограничение: текст
вопроса и альтернативных ответов не должен занимать более од-
ной строки экрана.
Программа должна выставлять оценку по следующему правилу:
отлично — за правильные ответы на все вопросы, хорошо — если
испытуемый правильно ответил не мене чем на 80% вопросов, удовлетворительно
— если правильных ответов более 60%, и неудовлетворительно — если правильных ответов меньше 60%.
Ниже приведена рекомендуемая структура файла теста (Ni — количество
вариантов ответа к i-му вопросу, Ki — номер правильного
ответа), пример файла теста и вид экрана во время работы
программы (номера ответов, введенные пользователем, выделены
полужирным).
0
zss
Модератор
Эксперт С++
7772 / 7007 / 4396
Регистрация: 18.12.2011
Сообщений: 18,528
Завершенные тесты: 1
09.04.2017, 15:09 13
А у меня вот что:
Чтение вопросов теста из файла


попробуйте отключить Avast
0
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
09.04.2017, 15:56  [ТС] 14
Цитата Сообщение от zss Посмотреть сообщение
попробуйте отключить Avast
Вы меняли что то в коде? Просто у меня нечего не выводит, и Avast отключил.
0
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
09.04.2017, 16:02  [ТС] 15
Вы нечего не меняли в коде? Просто у меня все как было, и Avast отключил.
Вот что выдает:
0
Миниатюры
Чтение вопросов теста из файла  
zss
Модератор
Эксперт С++
7772 / 7007 / 4396
Регистрация: 18.12.2011
Сообщений: 18,528
Завершенные тесты: 1
09.04.2017, 19:32 16
тогда воспользуйтесь отладчиком
Как пользоваться отладчиком (в Visual Studio)
0
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
09.04.2017, 22:34  [ТС] 17
Уже все перепробовал, ничего не пойму, ниже код.
Вот тут лежит сам файл D:\\file\\fname
Выдает то что на фото!
Думаю что ошибка в строчке 28, ну не пойму что за ошибка.
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
Миниатюры
Чтение вопросов теста из файла  
nd2
2889 / 2444 / 1069
Регистрация: 29.01.2016
Сообщений: 8,142
09.04.2017, 22:52 18
Цитата Сообщение от Burgo Посмотреть сообщение
FILE* f
Цитата Сообщение от Burgo Посмотреть сообщение
strcpy_s
Цитата Сообщение от Burgo Посмотреть сообщение
puts
Цитата Сообщение от Burgo Посмотреть сообщение
fgets
Цитата Сообщение от Burgo Посмотреть сообщение
printf
Цитата Сообщение от Burgo Посмотреть сообщение
scanf_s
Это Си? Тогда и спрашивай там: http://www.cyberforum.ru/c-beginners/
0
Burgo
0 / 0 / 0
Регистрация: 09.04.2017
Сообщений: 16
09.04.2017, 22:55  [ТС] 19
Уже все перепробовал, ничего не пойму, ниже код.
Вот тут лежит сам файл D:\\file\\fname
Выдает то что на фото!
Думаю что ошибка в строчке 28, ну не пойму что за ошибка.
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
Миниатюры
Чтение вопросов теста из файла  
nimazzzy
Заблокирован
09.04.2017, 23:02 20
При открывании файла в Си символ t не нужен.
Цитата Сообщение от Burgo Посмотреть сообщение
if (!argc)
Неправильная провека, надо проверять, что аргументов > 1 хотя бы.
0
09.04.2017, 23:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2017, 23:02

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

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

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


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

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

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