![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
gfz |
|
||||
Unregistered |
Задача: Дан файл, содержащий сведения о владельцах автомобилей. Структура записи файла:
Фамилия и инициалы владельца, марка авто и номер авто. Написать прогу, которая печатает - фамилии владельцев и комера автомобилей данной марки (в алфавитном порядке) - количество автомобилей каждой марки Итак, первое задание я сделал. Вот текст программы:
А вот второе задание, как ни пытался, не выходит. Я знаю, что там надо работать с таблицами, но что-то не получается. Вот текст той программы, что я сделал:
Результат был примерно такой: Mazda 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 А должен быть таким: Mazda 6 BMW 5 VW 4 и т.д. (цифра - количество машин данной марки, встречающихся в файле, в примере цифры взяты наугад) Помогите решить. Скачать файл (auto.txt), в котором занесены фамилии владельцев, марки автомобилей и гос. номера можно тут http://webfile.ru/692750 |
||||
|
|||||
blackofe |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
значит так.
1. поле названий автомобилей в твоем файле имеет длину не 9, а 10. 2. вот таким выражением int tab[31] = { 0 }; ты не инициализируешь массив - только первый элемент. а ведь ты потом обращаешься к элементам массива с надеждой, что там лежат нули или пробелы. надо использовать memset для инициализации обоих массивов. 3. понятно, что ты пытаешься n использовать как индикатор - есть у нас автомобили или нет. но проще просто смотреть по массиву - если tab[i] равен нулю, значит данных уже нет. кстати, использование выражения n < i совершенно непонятно, потому что i у нас может быть вообще говоря любым - от нуля до 30. 4. в формат printf надо добавить "\n", чтобы у тебя печаталось по строкам. примерный вид после изменений и (слегка) подрехтованного кода (я его покрутил под себя - мне так было проще разбираться) получается следующий:
результат работы программы:
хотя, конечно же, я бы все сделал не так ![]() |
||||
|
|||||
gfz |
|
|||
Unregistered |
Спаибо огромное 8))) загнал в компилятор, выдал 13 ошибок. Загнал в другой компилятор, все работает исправно 8) только вот для удобства перед fclose (f) надо написать getch(); а то компилятор показывает результат на долю секунды 8)
Да, и еще... можешь объяснить действие оператора memset? |
|||
|
||||
Fixin |
|
||||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
|
||||
|
|||||
gfz |
|
|||
Unregistered |
memset(tab, 0, sizeof(tab));
то есть в моем случае массиву tab в количестве sizeof(tab) (в данном случае 31) каждому элементу задается нулевое значение? |
|||
|
||||
blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
я работаю с vc++ 2003. при выполнении программы, запущенной из-под IDE, по окончании выдается строка "Press any key to continue", и консоль ждет нажатия любой клавиши. поэтому я getch() никогда не использую. если хочется посмотреть какие-то промежуточные результаты - на это есть дебагер с пошаговым выполнением программы. более того, если ты пишешь консольную программу, то подразумевается, что ты ее будешь использовать в досовской консоли, которая никуда не исчезает по окончании программы. другими словами, функция getch() используется некоторыми программистами для удобства отладки программы. для использования же она не нужна. Это сообщение отредактировал(а) blackofe - 16.12.2005, 21:16 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |