Ошибка при сортировке символьного массива, используя указатели - C (СИ)
Формулировка задачи:
Вылетает прога, в чем ошибка .
Должна быть сортировка символьного массива, даже не могу ввести элементы...
#include <stdio.h>
#include <stdlib.h>
*/int main ()
{ setlocale (LC_ALL,"russian");
int N;
char *ptr;
int i,tmp;
puts ("Введите количество элементов N");
scanf ("%d",&N);
*ptr = (char*)malloc (sizeof(char) * N);
puts ("Введите элементы ");
for (i=0;i<N;i++)
scanf("%c",ptr++);
if (ptr==NULL)
{
printf ("OFF");
}
for (i=0;i<N;i++)
printf ("%c",ptr++);
return 0;Решение задачи: «Ошибка при сортировке символьного массива, используя указатели»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define SWEEP while(getchar()!='\n')
int main(void)
{
setlocale (LC_ALL,"Ru");
int N;
char *ptr, *p;
puts ("Введите количество элементов N");
scanf ("%d",&N);
p=ptr = (char*)malloc (sizeof(char) * N);
puts ("Введите элементы "); SWEEP;
for (int i=0;i<N;i++)
{scanf("%c",p); SWEEP; ++p;}
p=ptr;
for (int i=0;i<N;i++)
{printf ("%c",*p);++p;}
p=ptr;
int j, tmp,i;
for( i=0; i<N-1; ++i)
{
for(j=i+1; j<N; ++j)
{
if(p[i]>p[j])
{
tmp=p[i];
p[i]=p[j];
p[j]=tmp;
}
}
}
puts("");
for (int i=0;i<N;i++)
{printf ("%c",*p);++p;}
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Устанавливается русская локаль
- Определяется переменная N типа int для хранения количества элементов
- Определяются две указательные переменные ptr и p, которые будут использоваться для работы с массивом
- Выводится сообщение с просьбой ввести количество элементов и сохраняется в переменной N
- Вводится массив символов с помощью scanf, используется SWEEP для считывания всех символов до новой строки
- Выводится сообщение
Введите элементы - В цикле от 0 до N-1 происходит сортировка массива по возрастанию с помощью алгоритма пузырька
- Выводится отсортированный массив с помощью printf
- Возвращается 0, чтобы указать, что программа успешно завершилась