Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Ardarik
11 / 8 / 2
Регистрация: 16.01.2011
Сообщений: 222
#1

Функции, где то ошибка - C (СИ)

27.01.2011, 10:44. Просмотров 1150. Ответов 18
Метки нет (Все метки)

Переписал программку из книжки Керниган, а не работает и не пойму где ошибка


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[])
{
int power(int m, int n);
{
 int i;
 for (i=0; i<10; ++i)
 printf ("%d %d %d\n",i, power(2,i), power(-3,i));
 return 0;
    }
{
int power (int base, int n);
{
int i, p;
p=1;
for (i=1; i<=n; ++i) // пишет ошибка
p= p* base;
return p;
    }
      }
 
  
  system("PAUSE");  
  return 0;
}

http://www.cyberforum.ru/c-beginners/thread2118788.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2011, 10:44
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Функции, где то ошибка (C (СИ)):

Где ошибка
Помогите. Не знаю где ошибка(ошибки) в коде.#include &lt;stdio.h&gt; #include...

где ошибка?
максимальные размеры массива - статические константы; • реальные размеры...

где ошибка?
Найти среднее арифметическое и вместо максимального и минимального ср....

Где ошибка?
Накопились вопросы: почему происходит аварийный выход? Как сделать так,чтобы...

где ошибка!
где ошибка! #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;alloc.h&gt;...

18
NiRamz
211 / 211 / 33
Регистрация: 26.12.2010
Сообщений: 691
27.01.2011, 11:02 #2
странный пример ..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
 
int power (int base, int n);
int main(int argc, char *argv[])
{
int i;
for (i=0; i<10; ++i)
printf ("%d %d %d\n",i, power(2,i), power(-3,i));
system("pause"); 
}
 
 
int power (int base, int n)
    {
        int i, p;
        p=1;
        for (i=1; i<=n; ++i) // пишет ошибка
        p= p* base;
        return p;
    }
Добавлено через 1 минуту
и еще, переменный для инкриминации цикла лучше объявлять так
C++
1
for(int i=0; ...)
0
dakota412
22 / 22 / 1
Регистрация: 14.02.2010
Сообщений: 50
27.01.2011, 18:53 #3
Вот так вот всё работает. Но в предыдущем посте правильно отмечено, что объявлять функции внутри других функций не (а определять вообще нельзя), если конечно вам это не прям совсем требуется по контексту программы.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
 
 
int main(int argc, char *argv[])
{
int power(int m, int n);
int i;
for (i=0; i<10; ++i)
printf ("%d %d %d\n",i, power(2,i), power(-3,i));
system("PAUSE");    
return 0;
}
 
int power (int base, int n)
{
int i, p;
p=1;
for (i=1; i<=n; ++i) // пишет ошибка
p= p* base;
return p;
}
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
28.01.2011, 07:14 #4
Цитата Сообщение от Ardarik
из книжки Керниган
system("pause"); ? уиндоус тогда ещё не было
windows K&R

int main(int argc, char *argv[]) - это тоже, в K&R2 используется main() в этой задаче (они так делают, чтобы не загружать мозг до объяснений, причём C89 допускает такое определение)

так что это - отредактированный код, в котором перекосило функции
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
28.01.2011, 07:26 #5
Цитата Сообщение от Ardarik Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int power(int m, int n);
{
int i;
for (i=0; i<10; ++i)
printf ("%d %d %d\n",i, power(2,i), power(-3,i));
return 0;
}
{
int power (int base, int n);
{
int i, p;
p=1;
for (i=1; i<=n; ++i) // пишет ошибка
p= p* base;
return p;
}
}
system("PAUSE");
return 0;
}
Разве так?

Добавлено через 6 минут
Строка № 5: прототип функции объявлен внутри функции.
Строка № 13: прототип функции объявлен внутри функции.
Строки № 5 и № 13: два одинаковых прототипа функций. При перегрузке должны различаться типы параметров, а если это разные функции, то должны различаться имена функций.

Добавлено через 1 минуту
Строка № 17: переменная n нигде не объявлена, но используется в заголовке цикла.
0
Nameless One
Эксперт С++
5785 / 3434 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
28.01.2011, 08:09 #6
Цитата Сообщение от dakota412 Посмотреть сообщение
Вот так вот всё работает. Но в предыдущем посте правильно отмечено, что объявлять функции внутри других функций не (а определять вообще нельзя), если конечно вам это не прям совсем требуется по контексту программы.
Объявлять можно, и с расширением gcc nested functions еще и определять можно
0
Iron Bug
22 / 22 / 2
Регистрация: 06.12.2010
Сообщений: 125
28.01.2011, 08:43 #7
Цитата Сообщение от NiRamz Посмотреть сообщение
и еще, переменный для инкриминации цикла лучше объявлять так
C++
1
for(int i=0; ...)
вы ща насоветуете! это C, а не С++. всё правильно объявлено, в начале блока.
0
Nameless One
Эксперт С++
5785 / 3434 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
28.01.2011, 08:46 #8
Цитата Сообщение от Iron Bug Посмотреть сообщение
вы ща насоветуете! это C, а не С++. всё правильно объявлено, в начале блока.
а в C99 так можно делать
0
Iron Bug
22 / 22 / 2
Регистрация: 06.12.2010
Сообщений: 125
28.01.2011, 08:49 #9
Цитата Сообщение от Nameless One Посмотреть сообщение
C99 позволяет объявлять переменные-счетчики внутри цикла
таки кто его поддерживает? большинство компилеров пошлёт нах.
0
Nameless One
Эксперт С++
5785 / 3434 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
28.01.2011, 08:55 #10
Цитата Сообщение от Iron Bug Посмотреть сообщение
таки кто его поддерживает? большинство компилеров пошлёт нах.
Можно посмотреть здесь. К примеру, gcc нормально скомпилит с опцией -std=c99 или -std=gnu99. Как и большинство *современных* компиляторов.
0
Iron Bug
22 / 22 / 2
Регистрация: 06.12.2010
Сообщений: 125
28.01.2011, 08:57 #11
да, кстати, ошибка в 15 строке:
int power (int base, int n);
убери ';' - это функция, я не предварительное объявление.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
28.01.2011, 09:03 #12
На плюсах уже появились локальные функции? Новость хорошая, но какой компил это поддерживает и как такие функции объявлять?
0
Iron Bug
22 / 22 / 2
Регистрация: 06.12.2010
Сообщений: 125
28.01.2011, 09:05 #13
Цитата Сообщение от taras atavin Посмотреть сообщение
На плюсах уже появились локальные функции? Новость хорошая, но какой компил это поддерживает и как такие функции объявлять?
ещё раз: это НЕ плюсы.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
28.01.2011, 09:07 #14
То, что у ТС не плюсы, я уже понял, а
Цитата Сообщение от Nameless One Посмотреть сообщение
Объявлять можно, и с расширением gcc nested functions еще и определять можно
к чему интересно относится?
0
Nameless One
Эксперт С++
5785 / 3434 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
28.01.2011, 09:14 #15
Цитата Сообщение от taras atavin Посмотреть сообщение
На плюсах уже появились локальные функции? Новость хорошая, но какой компил это поддерживает и как такие функции объявлять?
Цитата Сообщение от taras atavin Посмотреть сообщение
к чему интересно относится?
Это расширение gcc nested functions. Оно поддерживается только компилятором gcc и только для языка C, т.е. оно непереносимо. Пример:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
    const char* msg = "Hello, World!";
    
    void printMsg(size_t cnt)
    {
    while(cnt--)
        puts(msg);
    }
    printMsg(5);
   
    return 0;    
}
0
Iron Bug
22 / 22 / 2
Регистрация: 06.12.2010
Сообщений: 125
28.01.2011, 09:17 #16
ну и компилер нужен GCC. когда-то компилеры это хавали. мелкософт это не ест вроде, хотя не факт, может и есть режим совместимости со старыми стандартами.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
28.01.2011, 09:20 #17
То есть на плюсах этого нет, а на простых сях есть?
0
Ardarik
11 / 8 / 2
Регистрация: 16.01.2011
Сообщений: 222
29.01.2011, 13:01  [ТС] #18
ну с функциями немного разобрался, Спасибо всем
0
Nameless One
Эксперт С++
5785 / 3434 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
30.01.2011, 09:05 #19
Тема закрыта. Продолжить дискуссию о функциях можно в теме: http://www.cyberforum.ru/cpp-beginners/thread235800.html
0
30.01.2011, 09:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2011, 09:05
Привет! Вот еще темы с решениями:

Где ошибка?
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;ctype.h&gt;...

Где моя ошибка?
#include&lt;stdio.h&gt; #include&lt;math.h&gt; int main() { int n; int k;...

Где ошибка? подскажите
В С Удалить цифры 0, 3, 6, 9 из элементов массива. #include &lt;stdio.h&gt; ...

Где ошибка в коде?
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; char fun (char...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru