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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2009, 22:20   #1
Yura_n
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 23
По умолчанию Не могу найти ошибку(С++)

Это универсальная программа тестирования.Вроде все правильно,но не работает.Не могу сам разобраться.Вот код:
Код:
//универсальная программа тестирования
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "iostream.h"


void main (int argc,char*argv[])
{
	char qqq[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("\nNe zadan fail voprosov testa");
		puts("komandnaia stroka: test Imafaila testa\n");
		return;
	}
	strcpy(qqq,argv[1]);	//имя файла из командной строки
	//Открыть файл в режиме чтения(r) текста (t)
	if ((f=fopen("qqq","rt"))==NULL)
	{
		printf("Owibka otkritia faila %s",qqq);
		getch();
		return;
	}

	puts("\nSe4as vam budet predlojen.");
	puts("K kajdomu voprosu daetsia neskoliko \
		variantov otveta.");
	puts("Vi doljni vvesti nomer pravilinogo otveta.");
	puts("i najati klavishu <Enter>\n");


	printf("dlia na4ala testirovaniia najmite klavishu <Enter>");
	getch();
	

	while (!feof(f))
	{
		VsegoVopr++;
		fgets(st,80,f);				//читаем из файла вопрос
		printf("\n%s\n",st);		//вопрос на экран


		fscanf(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("\nVash vibor->");
		scanf("%i",&Otv);
		if (Otv == Prav)
			PravOtv ++;
	}

	//обработка рез-та тестирования
	//вычислим процент правильных ответов
	p = 100*PravOtv/VsegoVopr;
	printf("\nVasha ocenka - ");
	if (p==100) 
		puts("Otli4no!!!");
	if (p>=80 && p<=99)
		puts("horowo!!");
	if (p>=60 && p<=79)
		puts("Udovletvoritelino!");
	if (p<60)
		puts("PLOHO!!!\n");
	

	puts("\nDlia zaversheniia najmite klavishu <Enter>");
	getch();
}
Yura_n вне форума Ответить с цитированием
Старый 16.01.2009, 00:00   #2
IgorArhangel
Пользователь
 
Регистрация: 20.12.2008
Сообщений: 20
Сообщение Ошибок и нет...

Твоя прога не находит текстовый файл. Он у тебя вобще дан?
IgorArhangel вне форума Ответить с цитированием
Старый 16.01.2009, 00:13   #3
Yura_n
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 23
По умолчанию

Я тоже так думал,но файл qqq находится в той же директории что и exeшник.По идее туда можно будет вставлять любой текстовый файл и она должна его читать.
Yura_n вне форума Ответить с цитированием
Старый 16.01.2009, 09:03   #4
Ламер_001
Ну и что? :)
Форумчанин
 
Регистрация: 20.10.2008
Сообщений: 129
По умолчанию

1) f=fopen("qqq","rt") на f=fopen(qqq,"r")
2) fscanf(f,"%i %i",&nOtv,Prav); на fscanf(f,"%i %i",&nOtv,&Prav);
остальное вроде верно
Учиться, учиться и еще раз учиться
Ламер_001 вне форума Ответить с цитированием
Старый 16.01.2009, 10:07   #5
Yura_n
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 23
По умолчанию

Все поменял,но все равно выдает ошибку:Ошибка приложения,мол память не может быть read и т.д.
Yura_n вне форума Ответить с цитированием
Старый 16.01.2009, 12:14   #6
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

Попробуй полный путь прописать ... =)
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 17.01.2009, 22:15   #7
Yura_n
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 23
По умолчанию

Я очистил функцию main и убрал условие:
if (!argc)
{
puts("\nNe zadan fail voprosov testa");
puts("komandnaia stroka: test Imafaila testa\n");
return;
}
strcpy(qqq,argv[1]); //имя файла из командной строки

Не понял почему,но программа работает.Теперь осталось сделать интерфейс.Мне посоветовали перегнать ее в билдер,мол там легче.Но по моему так будет сложнее.Вопрос:Можно код из С++ переделать под билдер?
Yura_n вне форума Ответить с цитированием
Старый 20.01.2009, 09:08   #8
Ламер_001
Ну и что? :)
Форумчанин
 
Регистрация: 20.10.2008
Сообщений: 129
По умолчанию

можно? да!
как? ну это уже смотря что ты хочешь получить: ту же консольную программу или приложение с графическим интерфейсом
Учиться, учиться и еще раз учиться
Ламер_001 вне форума Ответить с цитированием
Старый 20.01.2009, 12:36   #9
Yura_n
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 23
По умолчанию

Все я разобрался.Получилась отличная програмка сприкольным интерфейсом.Кому надо могу дать код.
Yura_n вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку . KVANTOM Общие вопросы Delphi 2 08.01.2009 17:15
Паскаль, не могу найти ошибку в программе Julinja Помощь студентам 2 17.11.2008 20:42
Лаба по программированию. Не могу найти ошибку((( KrL^^ Помощь студентам 3 08.10.2008 14:49
Не могу найти ошибку! Эдуард Общие вопросы C/C++ 7 27.02.2008 16:34