Помощь - Поиск - Пользователи - Календарь
Полная версия: Обработка стрктур данных (Cи)
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
Credo
Помогите решить задачу
Сведения о колонне автобусов состоят из номера маршрута, марки автобуса, бортового номера и фамилии водителя.
а) Вывести фамилии водителей одинаковых маршрутов.
б) Вывести номера маршрута и фамилии водителей автобусов определенной марки (Ikarus, Laz, Liaz).

я вот начал а дальше незнаю что писать
#include <stdio.h>
#include <conio.h>
struct svedenie
{ char nom[20];
char marka[20];
char bortnom[20];
char fio[20];
int fiod; int nomar; }
main()
{ struct svedenie a;
int i;
for(i=1;i<n;i++)
puts("nomera marshrutov="); gets(a[i].nom);
puts("Marki avtobusov="); gets(a[i].marka);
Krjuger
А ты выложи польный код,а то это у тебя обрезано,во первых, где у тебя ввод n а то как ты будеш знать,когда у тебя цикл закончится??Во вторый, main(),а разве основная программа не void main() или int main(),ну там их много,но основной особенностью всех их является то,что они обладают типом.Далее.Ты создаеш один обьект, обладающий следующими строчками и числами.А записать ты пытаешся нескольно раз,поэтому компилятор задается вопросами что такое скобка,ведь она у тебя в конструкторе никак не описана.Возможные варианты.....Либо ты создаеш массив обьектов твоей структуры,либо ты изменяеш структуру так,что у тебя всего 1 обьект ,но в нем массивы твоих строк.Например у тебя в самой структуре не 1 строка "марка" , а целый массив этих "марок".В общем исправь пока что это,а дальше уже проще пойдет.
IUnknown
Цитата
Во вторый, main(),а разве основная программа не void main() или int main(),ну там их много,но основной особенностью всех их является то,что они обладают типом.
Основной особенностью С является то, что при неуказании типа подразумевается int, если что...

Credo, для того, чтоб хранить марку автобуса, не нужно разбазаривать место под строку:
enum BUS_MODEL {Ikarus = 0, Laz, Liaz};

и потом используешь элемент этого перечисления для указания, какова же марка автобуса. Да и на номер маршрута отводить 20 символов, когда достаточно одного целого числа, не нужно.
Krjuger
Он должен быть,но не значит ,что он есть.При компилировании предоставленного товарищем кода я получил следующую ошибку.
Цитата
Error 1 error C3874: return type of 'main' should be 'int' instead of 'svedenie'

Так что я не с неба взял свои доводы.
Цитата
Да и на номер маршрута отводить 20 символов, когда достаточно одного целого числа, не нужно

А если номер маршрута содершит буквы?
IUnknown
Цитата
Error 1 error C3874: return type of 'main' should be 'int' instead of 'svedenie'

Так что я не с неба взял свои доводы.
Твоим компилятором даже гвозди забивать нельзя. Он и для этого не приспособлен. Свои доводы можешь оставить при себе. Есть Стандарт языка С. Называется C89, если ты этого не знал. Там описано "правило неявного int". А компилировать С-программу С++-компилятором не надо. Хочешь, я тебе приведу текст программы, который работает в Сях, но не будет компилироваться "плюсами"? Это в "плюсах" обязательно указывать тип возвращаемого значения. Кстати, тот же самый твой компилятор разрешает void main(), хотя GCC посылает тебя куда подальше. "Что вы на это выразите, а, товарищ?" (С).

Цитата
А если номер маршрута содершит буквы?
А если не содержит? Давай зададим вопрос топикстартеру, пускай он четко поставит задачу. А то так "а вдруг" "а если" - далеко не уедешь.

P.S. Синтаксическую ошибку, надеюсь, исправил, прежде чем компилировать код? Там после описания типа svedenie не хватает точки с запятой, если что.
Krjuger
Конешно исправил,там еще и скобочки в конце программы не хватало.
Насчет компилятора,увы,каюсь,что не использовал С компилятор,а VS C++,да действительно микрософт тратит огромные денешки на то,чем даже гвозди забивать нельзя,и конешно же все щас программируют на стандарте С 89,кому нужен С99.
Цитата
C99 является большей частью обратно совместимым с C90, но вместе с тем в некоторых случаях является более жёстким. В частности, объявление без указания типа больше не подразумевает неявное задание типа int.

Вот что я могу сказать на ваш стандарт С89.
Человек скорее всего использует либо VS C++ , либо Borland С++,которые скажут нечто пожожее на missing type specifier - int assumed.
На сей доброй тоже я предлагаю прекратить наши разногласия,потому что они ни к чему хорошему не приведут. Подожем топикстартера и лучше ему поможем,если он еще заинтересован в решении своей задачи.

P.S.
Цитата
Кстати, тот же самый твой компилятор разрешает void main(), хотя GCC посылает тебя куда подальше.

Подскажите тогда компилятор,который меня пошлет,а то что то мое изучение языка видать допустило какой то большой промах в самом начале.Хотелось бы исправить оплошность.
IUnknown
Цитата
да действительно микрософт тратит огромные денешки на то,чем даже гвозди забивать нельзя
Да MS посадил тебя этими разработками на свою ОС, и будешь ты под Windows сидеть до скончания веков. Ибо ничего кроме VC не знаешь. А выйдет новая версия Windows - старые окажутся не у дел, надо обновляться. И Студию обновлять. Совокупная стоимость купленных средств разработки и собственно, версий Windows такова, что на эти деньги (после вычета стоимости разработки компилятора) боссы от MS могут каждый день летать завтракать в Париж, а ужинать - на Канары.
Цитата
и конешно же все щас программируют на стандарте С 89,кому нужен С99.
Те, кто хочет иметь возможность со своим кодом работать везде, где есть компилятор, поддерживающий C89 - используют именно C89, а не C99. Ибо С89 - это ANSI-C со всеми вытекающими выгодами, а С99 - сборище каких-то левых дополнений, которые мало того, что от компилятора к компилятору перестают работать (ну, к примеру, взять код:
int main()
{
int n = 6;
int arr[n];

/* Тут работаем с массивом */

return 0;
}
. Он прекрасно компилируется GCC в режиме С99, хотя по C89 это - ошибка. С99 делает поблажки. Однако, я хочу программу скомпилировать Билдеровским компилятором. В режиме С. Что будет, догадаешься?
[BCC32 Error] File1.c(18): E2313 Constant expression required

будет. Так что С99 идет лесом. Если не хочешь проблем - используй именно С89...), так еще и на разных версиях компилеров ведут себя по-разному.

Цитата
Подскажите тогда компилятор,который меня пошлет
Я написал: GCC тебя пошлет. Пока не поменяешь тип на int - программу не откомпилируешь.

Цитата
Человек скорее всего использует либо VS C++ , либо Borland С++
Хинт: Windows - далеко не единственная ОС на планете Земля. Есть МакОСи, есть другие операционки. Где ни VC++ ни Borland не запустятся... Так что не надо все сводить к этим компиляторам...

Все-таки, ждем ТС. Теперь еще с указанием используемого компилятора...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.