Передать массив в функцию - 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"); }
Объяснение кода листинга программы
- #include
- подключает стандартную библиотеку ввода/вывода, которая содержит функции для работы с файлами и выводом данных на экран - #include
- подключает библиотеку ctype.h, которая содержит функции для работы со строками и проверкой символов на определенные условия - #include
- подключает библиотеку stdlib.h, которая содержит функции для работы с памятью, строками и общими математическими функциями - #include
- подключает библиотеку windows.h, которая содержит функции для работы с операционной системой Windows - int Read_File(char A, char FileNameInput, int MAX) - функция для чтения содержимого файла в массив, указанный в параметре A. В параметре FileNameInput передается имя файла для чтения, а в параметре MAX - максимальное количество символов, которые могут быть записаны в массив. Функция возвращает количество прочитанных символов
- char Upper(char A, int N) - функция для преобразования строки в верхний регистр. В параметре A передается массив, в котором нужно выполнить преобразование, а в параметре N - количество символов в массиве A, которые нужно преобразовать
- int main () - точка входа в программу. Здесь происходит установка кодировки консоли, чтение имен файлов для ввода и вывода, чтение содержимого файла, преобразование символов и запись результата в файл
- SetConsoleCP(1251) - установка кодировки консоли на Windows-1251
- SetConsoleOutputCP(1251) - установка кодировки вывода консоли на Windows-1251
- printf (
Используйте файл в кодировке Windows-1251\n
); - вывод сообщения с инструкцией для пользователя - scanf (
%s
, FileNameInput) - считывание имени файла из консоли - scanf (
%s
, FileNameOutput) - считывание имени файла для результата из консоли - OutputFile = fopen (FileNameOutput,
w
) - открытие файла для записи - N = Read_File(A, FileNameInput, 1024) - чтение содержимого файла в массив A с помощью функции Read_File
- A = Upper(A, N) - преобразование символов в верхний регистр с помощью функции Upper
- fputs (A, OutputFile) - запись содержимого массива A в файл
- fclose(OutputFile) - закрытие файла для записи
- printf (
Готово\n
) - вывод сообщения о завершении работы программы - system (
PAUSE
) - остановка выполнения программы до нажатия клавиши Enter PAUSE
- строка, которая вызывает паузу в выполнении программы до нажатия клавиши Enter
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д