Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 09.04.2017, 12:55   #1
Burgo
Новичок
 
Регистрация: 09.04.2017
Сообщений: 2
Репутация: 10
По умолчанию Чтение вопросов теста из файла - 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, 13:36   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 10,368
Репутация: 1609

icq: 216409213
По умолчанию

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

Код:

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, 13:53   #3
Burgo
Новичок
 
Регистрация: 09.04.2017
Сообщений: 2
Репутация: 10
По умолчанию

Вот переписал код, выключил директиву "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 вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение данных теста из INI Файлов nomad512 Общие вопросы Delphi 12 02.12.2014 16: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




07:11.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru