Передать массив в функцию - C (СИ) (79478)

Узнай цену своей работы

Формулировка задачи:

Всем привет! В процессе появился случай воспользоваться указателями, но я их забыл, прошу помощи. Надо в функцию передать символьный массив, чтоб функция поработала с ним и вернула уже изменённый массив. Без функции то что надо нормально делается, а с функцией компилятор требует расставить указатели. Вот ошибки:
 In function `char Upper(char*, int)':
:41: error: invalid conversion from `char*' to `char'
In function `int main()':
:60: error: incompatible types in assignment of `char' to `char[1024]'
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <windows.h>
int Read_File(char A[], char FileNameInput[], int MAX)
{
    int N = 0, k;
    FILE *InputFile;
    if ((InputFile = fopen (FileNameInput, "r")) == NULL) {
        printf ("Ошибка открытия файла\n");
        return 1;
    }
    while ( 1 ) 
    {
        k = fscanf ( InputFile, "%c", &A[N]);
        if ( k != 1 ) break;
        N++;
        if ( N >= MAX ) break;
    }
    fclose(InputFile);
    return N;
}
char Upper(char A[], int N)
{
    int j=0, i=0;
    for (i=0; i<N;i++)
        if (i == 0 && (A[i] > 'а' && A[i] < 'я'))
                A[i] -= 0x20;
            if (A[i]=='.' || A[i]=='!' || A[i]=='?')
                for (j=i+1; ; j++){
                    if ((isspace(A[j])) || (isdigit(A[j])))
                        continue;
                    else {
                        if (A[j] > 'а' && A[j] < 'я')
                                A[j] -= 0x20;
                        break;
                    }
                }
    return A;       
}
int main ()
{
    SetConsoleCP(1251); 
        SetConsoleOutputCP(1251);
    int i, j, N;
    char A[1024], FileNameInput[20], FileNameOutput[20];
    printf ("Используйте файл в кодировке Windows-1251\n");
    printf ("Введите имя исходного файла -> ");
    scanf ("%s", FileNameInput);
    printf ("Введите имя файла для результата -> ");
    scanf ("%s", FileNameOutput);
    FILE *OutputFile;
    OutputFile = fopen (FileNameOutput, "w");
    N = Read_File(A, FileNameInput, 1024);
    A = Upper(A, N);
    fputs (A, OutputFile);
    fclose(OutputFile);
    printf ("Готово\n");
    system ("PAUSE");
}
Спасибо!

Решение задачи: «Передать массив в функцию»

textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <windows.h>
int Read_File(char* A, char* FileNameInput, int MAX)
{
        int N = 0, k;
        FILE *InputFile;
        if ((InputFile = fopen (FileNameInput, "r")) == NULL) {
                printf ("Ошибка открытия файла\n");
                return 1;
        }
    while ( 1 ) 
        {
                k = fscanf ( InputFile, "%c", &A[N]);
        if ( k != 1 ) break;
        N++;
        if ( N >= MAX ) break;
    }
        fclose(InputFile);
    return N;
}
char* Upper(char* A, int N)
{
        int j=0, i=0;
        for (i=0; i<N;i++)
                if (i == 0 && (A[i] > 'а' && A[i] < 'я'))
                                A[i] -= 0x20;
                        if (A[i]=='.' || A[i]=='!' || A[i]=='?')
                                for (j=i+1; ; j++){
                                        if ((isspace(A[j])) || (isdigit(A[j])))
                                                continue;
                                        else {
                                                if (A[j] > 'а' && A[j] < 'я')
                                                                A[j] -= 0x20;
                                                break;
                                        }
                                }
        return A;               
}
int main ()
{
        SetConsoleCP(1251); 
        SetConsoleOutputCP(1251);
        int i, j, N;
        char *A, FileNameInput[20], FileNameOutput[20];
        printf ("Используйте файл в кодировке Windows-1251\n");
        printf ("Введите имя исходного файла -> ");
        scanf ("%s", FileNameInput);
        printf ("Введите имя файла для результата -> ");
        scanf ("%s", FileNameOutput);
        FILE *OutputFile;
        OutputFile = fopen (FileNameOutput, "w");
        N = Read_File(A, FileNameInput, 1024);
        A = Upper(A, N);
        fputs (A, OutputFile);
        fclose(OutputFile);
        printf ("Готово\n");
        system ("PAUSE");
}

Объяснение кода листинга программы

  1. #include - подключает стандартную библиотеку ввода/вывода, которая содержит функции для работы с файлами и выводом данных на экран
  2. #include - подключает библиотеку ctype.h, которая содержит функции для работы со строками и проверкой символов на определенные условия
  3. #include - подключает библиотеку stdlib.h, которая содержит функции для работы с памятью, строками и общими математическими функциями
  4. #include - подключает библиотеку windows.h, которая содержит функции для работы с операционной системой Windows
  5. int Read_File(char A, char FileNameInput, int MAX) - функция для чтения содержимого файла в массив, указанный в параметре A. В параметре FileNameInput передается имя файла для чтения, а в параметре MAX - максимальное количество символов, которые могут быть записаны в массив. Функция возвращает количество прочитанных символов
  6. char Upper(char A, int N) - функция для преобразования строки в верхний регистр. В параметре A передается массив, в котором нужно выполнить преобразование, а в параметре N - количество символов в массиве A, которые нужно преобразовать
  7. int main () - точка входа в программу. Здесь происходит установка кодировки консоли, чтение имен файлов для ввода и вывода, чтение содержимого файла, преобразование символов и запись результата в файл
  8. SetConsoleCP(1251) - установка кодировки консоли на Windows-1251
  9. SetConsoleOutputCP(1251) - установка кодировки вывода консоли на Windows-1251
  10. printf (Используйте файл в кодировке Windows-1251\n); - вывод сообщения с инструкцией для пользователя
  11. scanf (%s, FileNameInput) - считывание имени файла из консоли
  12. scanf (%s, FileNameOutput) - считывание имени файла для результата из консоли
  13. OutputFile = fopen (FileNameOutput, w) - открытие файла для записи
  14. N = Read_File(A, FileNameInput, 1024) - чтение содержимого файла в массив A с помощью функции Read_File
  15. A = Upper(A, N) - преобразование символов в верхний регистр с помощью функции Upper
  16. fputs (A, OutputFile) - запись содержимого массива A в файл
  17. fclose(OutputFile) - закрытие файла для записи
  18. printf (Готово\n) - вывод сообщения о завершении работы программы
  19. system (PAUSE) - остановка выполнения программы до нажатия клавиши Enter
  20. PAUSE - строка, которая вызывает паузу в выполнении программы до нажатия клавиши Enter

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы