Как определить и вызвать внешнюю функцию в основной программе, если она содержит int и char в качестве аргументов?

#c #function #header-files

#c #функция #заголовочные файлы

Вопрос:

Итак, у меня есть файл main.c, в котором находится мой код, и внешний файл calc.c, в котором я хочу выполнить некоторые вычисления. Я определяю файл заголовка в main.c (calc.h) и должен просто вызвать функцию calc.c в какой-то момент. В main.c у меня есть 3 входа через терминал, назовем их a, b и c, и это некоторые числа. В зависимости от чисел, которые я ввожу в качестве входных данных, я создаю имя файла (например, a5b3c7), которое я сохраняю в «char filename». Затем в main.c я выполняю некоторые вычисления и записываю таблицу значений в этот файл «a5b3c7». Итак, это массив значений. Теперь, после записи всех значений в таблице и закрытия файла «a5b3c7», я хочу вызвать функцию calc.c и выполнить некоторые вычисления с числами, которые находятся в созданной таблице. Мне нужно передать в качестве аргументов один int и имя файла, который он должен использовать.

Проблемы: Моя функция calc.c должна иметь 2 входа, один «int» и другой «char». В заголовочном файле calc.h У меня есть:

     int calc(int i, char filename);
  

Должен ли я просто запустить функцию calc.c как

     int calc(int i, char filename){
       FILE * pointer;
       int ...;
       double ...;
       pointer = fopen(filename, "r");
       .
       .
       .
    }
  

? Четко ли определены типы функций и аргументов?
Как я могу вызвать эту функцию сейчас из основной программы?
Должен ли я просто написать что-то вроде

     int main (void) {
    ...      
    calc(i, filename);
    ...
    }
  

Пытаясь заставить ее работать, я получил разные ошибки, такие как «ожидаемый ‘char’, но аргумент имеет тип‘char *’, «передача аргумента 1 из ‘fopen’ делает указатель из целого числа без приведения [включено по умолчанию]», «ожидаемый ‘const char * restrict’, но аргумент имеетвведите ‘char’»…

Спасибо за помощь, я все еще учусь 😉

Комментарии:

1. У вас все правильно (даже если, возможно, это можно было бы написать «лучше»), кроме одной ошибки: в C строки есть char* , а не char . Конечно, последствия этого не могут поместиться в эти несколько слов, но вы можете легко найти материал «строки в C».

Ответ №1:

Используйте char *filename вместо char filename . Нравится

 int calc(int i, char *filename);
  

Комментарии:

1. Хорошо, кажется, что, по крайней мере, я избавляюсь от ошибок. Но тогда у меня есть дополнительный вопрос… если в файле calc.c есть операторы printf, и я вызываю его из main.c, должен ли он записывать вывод printf в терминал или мне нужно создать файл, в котором будут сохранены мои новые значения из calc.c?

2. @makeasmile это печать на терминале.

3. О, хорошо, я так думаю, но это не так, похоже, мне еще предстоит поработать: P Tnx!