Вопрос № 98070: Здравствуйте. Я уже задавал подобный вопрос (№98025), спасибо ответившим мне. Только вот проблема не решилась:
Код программы ниже. Значение тестового фала таково: "nameyear175"
Нужно чтобы результаты работы программы были в таком ви...Вопрос № 98071: Здравствуйте
Вывожу на канве текст с помощью TextOutA
Как сделать чтобы функция не заполняла фон?...Вопрос № 98074: Здравствуйте эксперты.
Пишу программу, которая бы искала и копировала в указаное место папки, имена которых перечислены в текстовом файле.
Не пойму почему не работает функция CopyDir которая должна копировать папку со всем её содержимым. На ...Вопрос № 98138: Здравствуйте эксперты!Скажите как правильно подключить и использовать файловые потоки
(fstream,ofstream,ifstream) в Visual C++ или подскажите где можно об этом почитать.
Заранее спасибо!...
Вопрос № 98.070
Здравствуйте. Я уже задавал подобный вопрос (№98025), спасибо ответившим мне. Только вот проблема не решилась:
Код программы ниже. Значение тестового фала таково: "nameyear175"
Нужно чтобы результаты работы программы были в таком виде (1) а не в таком (2).
(1) name
year
123
(2) nameyear123
year123
123
Установка диррективы pragma не помогает. Пожалуйста помогите мне заставить прогу читать корректно структуру с файла именно с использованием функции fread
Приложение:
Отправлен: 11.08.2007, 19:03
Вопрос задал: Nikankin (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Алексей Демаков
Здравствуйте, Nikankin!
Давайте начнем с консерватории :) То есть, с основ языка. На мой взгляд, имеется некоторое недопонимание, которое и приводит к проблемам. Итак:
1. Для размещения строки из N символов в C/C++ требуется предоставить N+1 байт памяти - N для символов и 1 для завершающего нуля. Завершающий нуль требуется для того, чтобы зная указатель на начало строки, определить, где она заканчивается.
2. Поля структуры располагаются в памяти последовательно, но между ними, возможно, есть промежутки - это не задается стандартом, а зависит от конкретного компилятора и указанных опций.
3. pragma - это директива, смысл которой зависит от конкретного компилятора. Поскольку в условии не оговорено, какой компилятор используется, ничего про pragma pack cказать нельзя.
Теперь смотрим:
а). в поля структуры вы пытаетесь записать строки бОльшего размера, чем там есть места - см. (1)
б). Вы пытаетесь прочитать из файла количество байт, равное sizeof(per). Согласно (2), это не обязательно сумма размеров полей. То есть, вашего текстового файла может не хватить для заполнения структуры.
в). В текстовом файле нет завершающих нулевых символов для строк, потому puts проскакивает конец строки, которая находится в поле структуры и переходит к следующему полю и т.п., пока не доберется до нулевого символа (видимо, Вам повезло и после per в памяти находятся нули, а то можно и до памяти, недоступной на чтение добраться). Дело в том, что размер строки для функции puts недоступен - ей передают указатель, который задает только начало строки, конец определяется нулевым символом.
Совет: если хотите научиться программировать хорошо, пытайтесь писать переносимые программы, поведение которых определяется стандартом, а не особенностями конкретного компилятора.
Вывод: поскольку стандарт не определяет расположение полей структуры в памяти, с помощью одного вызова fread читать структуру из файла - ПРИНЦИПИАЛЬНО НЕПРАВИЛЬНО. Это признак плохого стиля и возможный источник труднообнаруживаемых ошибок. Если хотите, можете вызвать fread три раза, для каждого поля структуры в отдельности. Не забудьте увеличить размер полей и проставить нули в конце строк. Тогда все получится.
Ответ отправил: Алексей Демаков (статус: Студент)
Ответ отправлен: 11.08.2007, 21:23 Оценка за ответ: 5
Отвечает: kool
Здравствуйте, Nikankin!
Все правильно просто выводить
нужно по другому. Вариантов много
вот один из них.
#include
....
main(){
.....
char str[10];
strcpy(str,per.name);
str[sizeof(per.name)]=0;
printf("%s
",str);
strcpy(str,per.year);
str[sizeof(per.year)]=0;
printf("%s
",str);
strcpy(str,per.height);
str[sizeof(per.height)]=0;
printf("%s
",str);
}
Либо в файле после каждого значения поля ставить 0.
Удачи!
--------- I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 11.08.2007, 21:43 Оценка за ответ: 5
Вопрос № 98.071
Здравствуйте
Вывожу на канве текст с помощью TextOutA
Как сделать чтобы функция не заполняла фон?
Отправлен: 11.08.2007, 19:06
Вопрос задал: Sov (статус: 6-ой класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Jadd
Здравствуйте, Sov!
Попробуйте функцию
int SetBkMode(
HDC hdc, // handle to DC
int iBkMode // background mode
);
iBkMode может быть:
OPAQUE и TRANSPARENT
Ваш вариант - второй. ;)
Удачи.
--------- Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал) Адрес: Санкт-Петербург WWW:http://www.sport-diary.ru ---- Ответ отправлен: 11.08.2007, 21:11 Оценка за ответ: 5 Комментарий оценки: Спасибо, то что нужно
Вопрос № 98.074
Здравствуйте эксперты.
Пишу программу, которая бы искала и копировала в указаное место папки, имена которых перечислены в текстовом файле.
Не пойму почему не работает функция CopyDir которая должна копировать папку со всем её содержимым. На сколько я понял ошибка в там в пути до копируемой папки, который передается в функцию и заносится в fo.pFrom. Но заносится туда вроде правильный путь, так что не пойму в чем тут дело.. Выдается сообщение что не удается произвести чтение с файла или диска.
Отвечает: Sov
Здравствуйте, Вячеслав Шинкаренко!
Список файлов в fo.pFrom должен завершаться двумя нулями
fo.pFrom ="c:\mdcfo.pTo = "C:\my\";
Ответ отправил: Sov (статус: 6-ой класс)
Ответ отправлен: 11.08.2007, 21:18 Оценка за ответ: 5 Комментарий оценки: А-а! Понятно! Спасибо.
Вопрос № 98.138
Здравствуйте эксперты!Скажите как правильно подключить и использовать файловые потоки
(fstream,ofstream,ifstream) в Visual C++ или подскажите где можно об этом почитать.
Заранее спасибо!
Приложение:
Отправлен: 12.08.2007, 14:27
Вопрос задал: Hunter20 (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Терсков Сергей
Здравствуйте, Hunter20!
Подобные вопросы здесь уже не раз задавались. В ответе на вопрос № 97586 я советовал использовать книгу "Николай Джосьютис. Стандартная библиотека С++". Ссылку на электронный вариант можно найти в ответе...
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 13.08.2007, 03:27