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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2017, 11:55   #1
Burgo
Новичок
Джуниор
 
Регистрация: 09.04.2017
Сообщений: 2
По умолчанию Чтение вопросов теста из файла - C++

Программа-тест не работает! Вот код
Код:
// Универсальная программа проверки знаний 
// имя файла теста задается в инструкции запуска программы
#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("C:\\Users\\kosty\\Documents\\Visual Studio 2017\\Projects\\test1\\test1\\fname.txt", 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();
}
Проблема в fopen, пробивал по разному, ничего не получается.
Burgo вне форума Ответить с цитированием
Старый 09.04.2017, 12:36   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А документациюю посмотреть нельзя?

Код:
f = fopen_s("C:\\Users\\kosty\\Documents\\Visual Studio 2017\\Projects\\test1\\test1\\fname.txt", fname, "rt")) == NULL)
Это что?
Цитата:
errno_t fopen_s(
FILE** pFile,
const char *filename,
const char *mode
);
p51x вне форума Ответить с цитированием
Старый 09.04.2017, 12:53   #3
Burgo
Новичок
Джуниор
 
Регистрация: 09.04.2017
Сообщений: 2
По умолчанию

Вот переписал код, выключил директиву "stdafx.h", выдает консоль, а в нем пусто, не пойму что к чему
Код:
// Универсальная программа проверки знаний 
// имя файла теста задается в инструкции запуска программы
#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();
}
Burgo вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение данных теста из INI Файлов nomad512 Общие вопросы Delphi 12 02.12.2014 15:08
Случайное появление вопросов теста Афанасий[vedma] Общие вопросы Delphi 5 27.01.2012 10:30
Чтение из файла на си Mostwanted Общие вопросы C/C++ 2 29.05.2011 15:42
Имя файла теста надо указать в командной строке запуска программы. ДениC Общие вопросы Delphi 28 03.04.2011 12:25
Чтение файла lapo4ka1368 Общие вопросы C/C++ 0 07.04.2010 17:15