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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2008, 19:48   #11
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Смотря откуда Вы берете данные. gets тоже может напортачить. Важно проверять размер буфера перед заполнением, например убедиться, что длина строки менее 31 символа (в Вашем случае). С помощью комбинации, скажем, strlen и strncpy (они же, не требующие линкования с stdlib) - lstrlen и lstrcpyn.
B_N вне форума Ответить с цитированием
Старый 26.01.2008, 19:57   #12
Raptor
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 50
По умолчанию

А так вот Вы о чем! Теперь ясно. Спасибо большое!
Дело в том что данные - имя игрока - будет вводится с клавиатуры и никто не будет изощряться и вводить более 30 символов. Вданном случае делать проверку не обязательно, но, конечно, вообще это желательно.

У меня еще вопрос:
Никак не получается справиться со второй функцией:

Предыдущая функция записывает в файл информацию.
Например содержание файла:


Starscream 7 7 700
Элвис 2 8 800
Толик 2 9 700
Таквот, мне нужно через программу открыть файл и отобразить всю информацию.
Как это удобнее сделать? (fscanf,fread)


Код:
fileopen()
{
int i;
char neim[32];

FILE *f;
	 f=fopen("2.txt","r");
	 izmers=sizeof(struct rec);
fseek(f,0,SEEK_SET);
i=0;
while (feof(f)==0)
{
fread(&Info,sizeof(Info),1,f);
gotoxy(1,1+i);
cprintf("%s  %d   %5.0f      %d     ",Info.name,Info.tries,Info.ti,Info.punkti);
i++}

fclose(f);
getch();
END:

}

Последний раз редактировалось Raptor; 26.01.2008 в 20:27.
Raptor вне форума Ответить с цитированием
Старый 26.01.2008, 20:06   #13
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

А что Вам мешает printf при записи заменить на практически эквивалентный scanf при чтении? Это, конечно, в качестве варианта, лично я вообще стараюсь ими не пользоваться.
B_N вне форума Ответить с цитированием
Старый 26.01.2008, 20:37   #14
Raptor
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 50
По умолчанию

сделал, но он выводит почему то
не

Starscream 7 7 700
Элвис 2 8 800
Толик 2 9 700

а


Starscream 7 0 0
7 700
Элвис 2 0 0
8 800
Толик 2 0 0
9 700



Код:
fileopen()
{
int i;
textbackground(BLACK);
clrscr();
FILE *f;
	 f=fopen("2.txt","r");
	fseek(f,0,SEEK_SET);
i=0;
while (feof(f)==0)
{
gotoxy(1,1+i);
fscanf(f,"%s   %i  %5.0f   %i", &Info.name, &Info.tries, &Info.ti, &Info.punkti);
printf("%s   %i  %5.0f   %i", Info.name, Info.tries, Info.ti, Info.punkti);
i++;}

fclose(f);
getch();
END:

}

Последний раз редактировалось Raptor; 26.01.2008 в 20:46.
Raptor вне форума Ответить с цитированием
Старый 26.01.2008, 20:43   #15
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Во-первых, я не могу найти в Вашем файле что-то типа float длиной в пять знаков, во-вторых, зачем вы мешаете между собой printf и gotoxy?
B_N вне форума Ответить с цитированием
Старый 26.01.2008, 21:06   #16
Raptor
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 50
По умолчанию

Это 3 значение у меня было от difftime поэтому float. В файл записывал откинув нули %5.0f и забыл что в файле теперь стал integer; ну да можно и без нее - \n

Со всем разобрался, все работает. Огромное спасибо еще раз!

Последний раз редактировалось Raptor; 26.01.2008 в 23:34.
Raptor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа, анализирующая текстовые файлы и строящая графики Karabister Фриланс 15 08.06.2008 15:30
Задача на текстовые файлы Paul11j Помощь студентам 20 17.03.2008 13:20
текстовые файлы ОЧЕНЬ НУЖНА ПОМОЩЬ leest Помощь студентам 6 30.01.2008 10:05
Текстовые файлы(задачка). Vadim2008 Общие вопросы C/C++ 1 11.01.2008 16:45