Передать массив в функцию - 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