Начал изучать Си. Первые трудности. |
Здравствуйте, гость ( Вход | Регистрация )
Начал изучать Си. Первые трудности. |
micro-chipset |
29.1.2011, 10:54
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 27.1.2011 Пользователь №: 2371 Спасибо сказали: 0 раз(а) Репутация: 0 |
Возникла проблема со следующей задачей. Задача из из книги Б. Керниган, Д. Ритчи "Язык программирования Си" Глава 1.6 упражнение 1.13 Книгу онлайн можно найти тут
Сама задача Програма должна выводить гистограмму длин слов во входном потоке. т.е. надо чтобы выводился массив допустим длинной 15 первый элемент слово из нуля букв второй символ слово из одной буквы третий символ из 2 букв ну и так далее. набросок программы
Программа компилируется, но выдает не верные результаты. Наверное не верно заполняю массив, как поправить. Зарание спасибо за помощь. |
|
|
Алексей1153 |
29.1.2011, 12:51
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
а почему именно C, а не C++ ? Или тебе для микроконтроллеров ?
Для начала - учимся основам: 1) форматирование кода (тут я лично мой варинт покажу, но он не самый плохой. Я даже уверен, что он хороший ) 2) инициализация с учётом вышесказанного, программа в стиле C будет выглядеть уже так Раскрывающийся текст
Сообщение отредактировал Алексей1153 - 29.1.2011, 12:55 |
|
|
micro-chipset |
29.1.2011, 14:43
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 27.1.2011 Пользователь №: 2371 Спасибо сказали: 0 раз(а) Репутация: 0 |
1) С форматированием согласен еще не вошло в привычку придерживаться нормального стиля.
На данный код компилятор ругается: Ошибки компилятора gcc power.c -o power power.c: В функции ‘main’: power.c:21: предупреждение: несовместимая неявная декларация внутренней функции ‘memset’
Этот кусочек не совсем ясен. Особенно что такое enum и зачем так делается. И зачем инитить массив что это дает. У Керниган и Ритчи пока такого не встречал если можно поясните пожалуста. Хотелось бы понять. |
|
|
Алексей1153 |
29.1.2011, 16:17
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
На данный код компилятор ругается: надо заголовочник добавить <memory.h> enum - это объявление константы типа int (причём, эта константа будет иметь область видимости, что очень хорошо) arrlen*sizeof(*length) - это выражение даст длину массива в байтах ( arrlen * длину_одного_элемента_массива) (*length) - это разыменование указателя, так что sizeof этого выражения вернёт размер указуемого элемента для статического массива можно было бы и просто sizeof(length) написать, но я не стал тебя путать и показал универсальный вариант для статических и для динамических массивов И зачем инитить массив что это дает инициализировать нужно абсолютно всё, иначе сюрпризы будут появляться в программах постоянно Сообщение отредактировал Алексей1153 - 29.1.2011, 16:19 |
|
|
Litkevich Yuriy |
29.1.2011, 20:16
Сообщение
#5
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
DEADHUNT |
29.1.2011, 20:22
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
На данный код компилятор ругается: надо заголовочник добавить <memory.h> enum - это объявление константы типа int (причём, эта константа будет иметь область видимости, что очень хорошо) arrlen*sizeof(*length) - это выражение даст длину массива в байтах ( arrlen * длину_одного_элемента_массива) не понятно чему ты учишь, но в C нету memory.h, функция memset определёна в string.h/cstring. по поводу arrlen*sizeof(*length), проще так:
Сообщение отредактировал DEADHUNT - 29.1.2011, 20:23 |
|
|
Rocky |
29.1.2011, 21:01
Сообщение
#7
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Кстати, а в ANSI C есть операторы "++" и "--" постфиксной и префиксной форм? (имеющие тот же смысл что и в С++)
Я просто помню помню фразу преподователя со 2-го курса института "Знаменитый оператор ++ языка С++....." которая предполагала, что все это было введено уже в С++.... А т.к. компилятора ANSI C у меня никогда не было =), я так и остался в неведении... |
|
|
BRE |
29.1.2011, 21:09
Сообщение
#8
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
Rocky |
29.1.2011, 22:10
Сообщение
#9
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Буду знать, пасиб)
|
|
|
micro-chipset |
30.1.2011, 10:55
Сообщение
#10
|
Новичок Группа: Новичок Сообщений: 7 Регистрация: 27.1.2011 Пользователь №: 2371 Спасибо сказали: 0 раз(а) Репутация: 0 |
Программа компилируется и работает. Но выдает не верный результат. Проверяю так:
то есть должна посчитать длинны слов в файле 1 в файле один содержится:
А программа выдает:
А должно быть:
Программа имеет вид: Исходный код программы
|
|
|
Текстовая версия | Сейчас: 2.1.2025, 22:12 |