Called object is not a function or function pointer ошибка

I am trying to write a program which implements the Pop and Push functions. The problem is, I am trying to pass the pointer that points to integer Top to the function, so that this integer keeps changing, but when I try to compile I always get this line:

**error: called object is not a function or function pointer (*t)—

#include<stdio.h>
#include<stdlib.h>

#define MAX 10
int push(int stac[], int *v, int *t)
{
  if((*t) == MAX-1)
  {
      return(0);
  }
  else
  {
      (*t)++;
      stac[*t] = *v;
      return *v;
   }
}

int pop(int stac[], int *t)
{
 int popped;
 if((*t) == -1)
 {
      return(0);
 }
 else
 {
     popped = stac[*t]
     (*t)--;
     return popped;
 } 
}
int main()
{
int stack[MAX];
int value;
int choice;
int decision;
int top;
top = -1;
do{
   printf("Enter 1 to push the valuen");
   printf("Enter 2 to pop the valuen");
   printf("Enter 3 to exitn");
   scanf("%d", &choice);
   if(choice == 1)
   {
       printf("Enter the value to be pushedn");
       scanf("%d", &value);
       decision = push(stack, &value, &top);
       if(decision == 0)
       { 
           printf("Sorry, but the stack is fulln");  
       }
       else
       {
           printf("The value which is pushed is: %dn", decision);
       }
   }
   else if(choice == 2)
    {
         decision = pop(stack, &top);
        if(decision == 0)
          {
               printf("The stack is emptyn");
          }
         else
          {
              printf("The value which is popped is: %dn", decision);
          }

    }
 }while(choice != 3);
 printf("Top is %dn", top);

}

The freeCodeCamp Forum

Loading

Smart1706

0 / 0 / 0

Регистрация: 05.10.2017

Сообщений: 6

1

Посмотрите, пожалуйста, что не так, не могу исправить ошибку(

05.10.2017, 23:15. Показов 4742. Ответов 7

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Задание: решите уравнение x — (x^2 / (1 + sin^2 (x+y+z)) в С

а вот, что получилось:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h> 
#include <math.h> 
int main() 
{ 
float x,y,z,sin,F; 
 
printf("Введите переменную x: %lfn", x); 
 
printf("Введите переменную y: %lfn", y); 
 
printf("Введите переменную z: %lfn", z); 
 
{ 
F = x - (x*x / 1 + sin (x+y+z)*sin (x+y+z)); 
} 
 
printf("Значение уравнения равно %lfn", F); 
 
return 0; 
}

Running «/home/ubuntu/workspace/lab3/task3.c»
/home/ubuntu/workspace/lab3/task3.c: In function ‘main’:
/home/ubuntu/workspace/lab3/task3.c:14:28: error: called object ‘sin’ is not a function or function pointer
F = x — (x*x / 1 + sin (x+y+z)*sin (x+y+z));
^
/home/ubuntu/workspace/lab3/task3.c:5:14: note: declared here
float x,y,z,sin,F;
^
/home/ubuntu/workspace/lab3/task3.c:14:40: error: called object ‘sin’ is not a function or function pointer
F = x — (x*x / 1 + sin (x+y+z)*sin (x+y+z));
^
/home/ubuntu/workspace/lab3/task3.c:5:14: note: declared here
float x,y,z,sin,F;
^

Process exited with code: 1



0



3592 / 2264 / 407

Регистрация: 09.09.2017

Сообщений: 9,498

05.10.2017, 23:50

2

у вас sin объявлено локальной переменной, хотя это математическая функция. Еще не помешает указать линкеру -lm если еще не сделано
Еще было бы неплохо организовать не только вывод переменных x,y,z, но и их ввод.
И отформатировать код — теги кода, отступы, комментарии.



1



0 / 0 / 0

Регистрация: 05.10.2017

Сообщений: 6

06.10.2017, 00:29

 [ТС]

3

COKPOWEHEU, видимо, мой уровень ниже начинающего — даже не представляю, как это всё сделать. Буду учиться. Спасибо



0



3592 / 2264 / 407

Регистрация: 09.09.2017

Сообщений: 9,498

06.10.2017, 09:25

4

sin как переменная у вас нигде не используется. Зачем она вообще там объявлена? Уберите ее объявление оттуда и все.
Если после этого линкер будет ругаться что не может найти sin(), передайте ему опцию -lm (примерный смысл -link libm.a — включить в исполняемый файл содержимое libm.a, математическую библиотеку). При ручной компиляции это выглядит как
gcc -o task task3.c -Os -Wall -gdwarf-2 -lm
Если захотите подробностей по остальным опциям — man gcc в помощь (для вас, как линуксоида это должно быть привычно).
Как это делается в разнообразные средах разработки вроде CodeBlocks, Eclipse — не знаю, мне хватает текстового редактора и make.



1



0 / 0 / 0

Регистрация: 05.10.2017

Сообщений: 6

06.10.2017, 09:56

 [ТС]

5

COKPOWEHEU, спасибо, количество ошибок сократилось до одной:
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
task3.c -lm
^



0



3592 / 2264 / 407

Регистрация: 09.09.2017

Сообщений: 9,498

06.10.2017, 10:05

6

Покажите исправленный код и команду, которой компилируете.

Цитата
Сообщение от Smart1706
Посмотреть сообщение

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token

«Отсутствует знак равно, запятая, точка с запятой или атрибут перед точкой». Проблема очевидно в исходном коде, но с ходу я точку не нашел. Там точно не указан номер строки?



1



Smart1706

0 / 0 / 0

Регистрация: 05.10.2017

Сообщений: 6

06.10.2017, 10:09

 [ТС]

7

COKPOWEHEU,

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <math.h>
 
task3.c -lm
int main() 
{ 
float x,y,z,F; 
printf("Введите переменную x:n");
scanf("%f",&x);
printf("Введите переменную y:n"); 
scanf("%f",&y);
printf("Введите переменную z:n"); 
scanf("%f",&z);
F = x-x*x/(1 + pow(sin(x+y+z),2)); 
printf("Значение выражения равно %lfn", F); 
return 0; 
}

Добавлено через 45 секунд
и ошибка:
Running «/home/ubuntu/workspace/lab3/task3.c»
/home/ubuntu/workspace/lab3/task3.c:4:6: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
task3.c -lm
^



0



3592 / 2264 / 407

Регистрация: 09.09.2017

Сообщений: 9,498

06.10.2017, 11:10

8

Цитата
Сообщение от Smart1706
Посмотреть сообщение

#include <math.h>
task3.c -lm
int main()

это прямо в коде программы??? Нет, это нужно указать компилятору!
Ну и учитесь пользоваться тегами кода, форматированием и комментариями.

Цитата
Сообщение от Smart1706
Посмотреть сообщение

float x,y,z,F;

printf(«Значение выражения равно %lfn», F);

Либо используйте «%f» (float), либо, если используете «%lf», объявите F как double.

Цитата
Сообщение от COKPOWEHEU
Посмотреть сообщение

Покажите исправленный код и команду, которой компилируете.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

06.10.2017, 11:10

Помогаю со студенческими работами здесь

Что здесь не так? Посмотрите пожалуйста
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;math.h&gt;
#define n 11
main()
{
int i;

Пожалуйста посмотрите что тут не так?
&lt;?php
if(isset($_POST)){
$fd = fopen(&quot;result.html&quot;, ‘w+’) or die (&quot;ddd&quot;);
$str = $_POST;…

не могу додумать,посмотрите что не так
Создать таблицу, которая содержит сведения о количестве изделий категории А, B, С, собранных…

Посмотрите пожалуйста программу ,вроде все должно работать ,но что-то не так
#include &lt;iostream&gt;
using namespace std;

int main() {
int a,b,c,i,z;
c=0;
cout&lt;&lt; &quot;enter…

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

Или воспользуйтесь поиском по форуму:

8

I try to insert many values into a queue and delete the first value in the queue.
However, I have an error when I want to print the queue after deleting values.

There is my code:

char queue[100];
int i=-1;

int *delete_queue(int value){

    int j;
    for(j= 0; j< 10; j++){
    queue[j]= queue[j+1];   
    }

    return queue;

}

void insert_queue(int value){

    i= i + 1;
    queue[i] = value;

}

void print_queue(int *p){

    int v;
    for(v =0; v < 5; v++){
        printf(">> %d n", *p(v+1) );
    }

}

int main(int argc, char const *argv[])
{
    //int v ;
    int *new_queue;
    insert_queue(33);
    insert_queue(22);
    insert_queue(11);

    new_queue= delete_queue(33);
    print_queue(new_queue);
    // for(v =0; v < 5; v++){
    //  printf(">> %d n", *new_queue(v+1) );
    // }

return 0;
}

The error is:

delete_queue_test.c: In function ‘print_queue’:
delete_queue_test.c:33:23: error: called object ‘p’ is not a function or  
function pointer
printf(">> %d n", *p(v+1) );
                   ^

please help me fix it, thank you.

У меня такой код:

  z=x-~y-1;
    printf("%d",z);
  z=(x^y)+2(x&y);
    printf("%d",z);
  z=(x|y)+(x&y);
    printf("%d",z);
  z=2(x|y)-(x^y);
    printf("%d",z);

Я получаю это сообщение об ошибке:

10:11: error: called object is not a function or function pointer 
z=(x^y)+2(x&y); 
        ^ 

Язык — C. Почему это произошло?

2 ответа

Лучший ответ

Что касается того, что означает ошибка: 2(x&y) говорит компилятору вызвать функцию 2, передавая x&y в качестве аргумента (точно так же, как printf("hi") означает « call {{ X4}} и передайте "hi" в качестве аргумента «).

Но 2 не является функцией, поэтому вы получаете ошибку типа. Синтаксически говоря, когда у вас есть значение, за которым следует (, это вызов функции.


1

melpomene
2 Мар 2017 в 16:19

+ Изменить

z=(x^y)+2(x&y);

К

z=(x^y)+2*(x&y);

А также

z=2(x|y)-(x^y);

К

z=2*(x|y)-(x^y);

Вам нужен оператор умножения, если умножение — это то, что вы хотели.


1

vatsug
2 Мар 2017 в 16:06

Возможно, вам также будет интересно:

  • Call to arms ошибка соединения завоевание
  • Call to arms ошибка при запуске приложения 0xc0000142
  • Call to arms ошибка при запуске not sdl file
  • Call to arms ошибка program will be terminated exception access violation at
  • Call to arms gates of hell ostfront ошибка при запуске приложения

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии