Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Записать переменую в файл

Ответить
Настройки темы
C/C++ - Записать переменую в файл

Пользователь


Сообщения: 147
Благодарности: 0

Профиль | Отправить PM | Цитировать


кратко: я хочу что бы пользователь выберал управление.
в опциях человек может выбрать какая клавиша отвечается за верх какая за них и так далее...
надо что бы код клавишы записывался в тхт файл.
вид файла:
77 // клавиша вверх
79 // клавиша в низ


и так далее.

ну потом считывать с файла тоже помогите...просто не сильно дружу с файлами и что то не получается.

Отправлено: 11:32, 29-06-2008

 

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Запись.
Код: Выделить весь код
#include <stdio.h>

int main(int argc, char* argv[])
{
	int keyCode;char *keyName;
	FILE *fSettings;
		if ((fSettings = fopen("MyAppKey.txt","w"))!=NULL)
		{
			keyCode=77;keyName=" // key DOWN";
			fprintf(fSettings, "%i%s\n",keyCode,keyName);// клавиша вверх 
			keyCode=79;keyName=" // key UP";
			fprintf(fSettings, "%i%s\n",keyCode,keyName); // клавиша в низ 
			fclose(fSettings);
		}
		else
			printf("Error file operation.");

	return 0;
}
Я б порекомендовал в части записи разделять не //, что интерпретируется как часть символа, а с помощью записи через \t, что значит пробел. То есть так
Код: Выделить весь код
/*...*/
keyCode=77;keyName="key DOWN";
fprintf(fSettings, "%i \t %s\n",keyCode,keyName);// клавиша вверх
/*...*/
А вот насчёт чтения такой структуры могут быть проблемы.
Сама процедура чтения не вызывает особых отличий, от процедуры получения данных переменных, единственное что указывается ещё имя потока открытого файла
Код: Выделить весь код
/*...*/
if ((fSettings = fopen("MyAppKey.txt","r"))!=NULL)
	{
		/*Внимание! Этот код закомментирован и требует доработки
		while (!feof(fSettings))
		{
			fscanf(fSettings, "%i \t %s\n", &keyCode, &keyName);//
			printf("\n%i %s", keyCode, keyName);
		}
		Внимание! Этот код закомментирован и требует доработки.
		Он лишь показывает идею считывания, а не её реализацию */
	}
/*...*/
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:27, 30-06-2008 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 147
Благодарности: 0

Профиль | Отправить PM | Цитировать


отлично.
while (!feof(fSettings)) - !feof - не знаю такой команды.
когда я писал // я расчитывал что вы поймете как комент просто ...
в коде файла можно обойтись без него..
я хочу вообще закодить в двоичный что бы не льзя было изменять в файле.

кстати хочу сразу сюданаписать..
есть варианты делать подсчет времени (засекание) без 2 потока?

Отправлено: 12:02, 30-06-2008 | #3


Пользователь


Сообщения: 147
Благодарности: 0

Профиль | Отправить PM | Цитировать


вот вопрос...как мне записывать в 1 строчку...а другое во второй

Отправлено: 01:23, 01-07-2008 | #4


Пользователь


Сообщения: 147
Благодарности: 0

Профиль | Отправить PM | Цитировать


и ещё как избежать ввода клавиши которые не отлавливаются???
типо ctrl ?

Отправлено: 01:53, 01-07-2008 | #5


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


DENoszone
feof
Если компилятор с прошлой темы не менялся то команда feof входит в заголовочный файл stdio.h, а /*...*/ в примере означает брать шапку и окончание с первого примера поста. Символ ! перед ней означает отрицание, а строчка кода while (!feof(fSettings)) означает "пока не найден конец файла".


Закодировать и/или работать в двоичном режиме?
Закодировать самым примитивным способом можно указывая соответствующие коды символов согласно кодовой таблицы. Character Tables
Двоичныё режим это соответственный режим чтения/записи файла, в котором всё может и оставаться по прежнему.

Запрет и работа с временем
Насчёт запрет на изменения то тут немного сложнее, можно добиться запрета во время работы программы но нет возможности сделать запрет изменения после. К слову, цитадельные файлы SAM контроля пользователей Windows и те можно изменить. Можно добавить контроль по сумам MD5 или прочим алгоритмам, что при не совпадении сумы затирать, что б не брать из этого файла инфу.
Вопрос насчёт времени предназначен для этой темы Измерение времени исполнения функции


А в примере уже всё так реализировано: использовать управляющий символ \n в (f)printf, про другие здесь.
А на эти клавиши идёт реакция?
Не стоит дописывать новым постом вопросы, разве прошло более чем три дня, лучше использовать редактирование поста, на который ещё нет ответа.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:33, 01-07-2008 | #6


Пользователь


Сообщения: 147
Благодарности: 0

Профиль | Отправить PM | Цитировать


про время загвостка.
и ещё в файле на какойто строчке пропущен символ, то что бы я мог сделать проверку..ifом это как сделать...

и ещё


для чтения из файла я использую

Код: Выделить весь код
					int size;
					FILE*f=fopen("KeyCod.txt","r+");
						if (f==0)return;
							char get[6];
						if(fgets(get,10,f)!=0)
							size=atoi(get);
						else return;
						int*ptr=new int[size];
						if(ptr==0)return;
						for(int i=0;i<size;i++){
							fgets(get,10,f);
							ptr[i]=atoi(get);
						}
						
						fclose(f);
но я не сильно понимаю что такое get что такое atoi точнее зачем он тут нужен.
и структура файла должна быть что бы первый символ говорил сколько строчек в файле..можно это как то убрать?
ptr [i] - номер строчки.

Отправлено: 18:48, 02-07-2008 | #7


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


get судя по написанному коду это массив из 6 ти символов.
atoi - функция преобразовывая символ в число. Естественно если символов не цифра, то возвращаемым значением будет 0.
Можно подсчитать количество строк в файле, поиском служебных символов конец строки, возврат каретки (коды 13 и 10), но проще использовать упомянутую строчку кода - while (!feof(fSettings))

Отправлено: 19:16, 02-07-2008 | #8


Пользователь


Сообщения: 147
Благодарности: 0

Профиль | Отправить PM | Цитировать


я не понимаю...
ну и как я буду проверять?
вот у меня ptr [1] - это тот символ который отвечает за движение вверх.
а как через то что ты сказал не понимаю+(

Отправлено: 19:20, 02-07-2008 | #9


Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Покажу на коде.
Код: Выделить весь код
int i=0;
for(int i=0;i<size;i++) while (!feof(fSettings))
{
    fgets(get,10,f);
    ptr[i]=atoi(get);
    i++;
}

Отправлено: 20:10, 02-07-2008 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Записать переменую в файл

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Файл *.img - не бутсектор, как записать на диск? Котяра Хочу все знать 8 24-02-2009 08:31
Как записать рипованный файл бОльшего размера в DVD (4,7 Gb)? webser Видео и аудио: обработка и кодирование 1 17-12-2007 00:30
Как записать mp3 файл на Audio CD диск? vagner_HATE Хочу все знать 4 28-11-2005 11:21
Как возможно перехватить задание, посланое на принтер и записать его в файл? babki Microsoft Windows NT/2000/2003 7 27-06-2005 18:02
как записать звуковой файл при помощи микрофона. peskov Хочу все знать 10 10-04-2003 19:29




 
Переход