Ошибка Null pointer assigment - C (СИ)
Формулировка задачи:
# include <stdio.h> # include <stdlib.h> # include <conio.h> main() { struct SP { float A; struct SP *pr,*pos; }; struct SP *tek,*sled,*nach,*con,*cur,*c,*news,*n; float AA, min, max; /*Ввод списка*/ tek=(struct SP*)malloc(sizeof(struct SP)); nach=tek; cur=NULL; printf("vvedite chislo\n"); scanf("%f",&AA); while(AA!=10) { tek->pr=cur; tek->A=AA; sled=(struct SP*)malloc(sizeof(struct SP)); tek->pos=sled; printf("vvedite chislo\n"); scanf("%f",&AA); cur=tek; tek=sled; } /*Вывод списка*/ printf("vivod\n"); tek->pos=NULL; con=cur; tek=nach; while(tek->pos!=NULL) { printf("%5.1f",tek->A); tek=tek->pos; } printf("\n"); /*Нахождение последнего отрицательного числа*/ tek=con; while(tek->pr!=NULL) { AA=tek->A; if(AA<0) { n=tek; break; } tek=tek->pr; } printf("poslednee otrichatelnoe=%3.1f\n",n->A); /*Переносим элементы после последнего отрицательного в новый список*/ tek=nach; tek=n->pos; news=(struct SP*)malloc(sizeof(struct SP)); news=tek; nach=news; cur=NULL; while(tek->pos!=NULL) { tek=news; c=(struct SP*)malloc(sizeof(struct SP)); c=sled->pos; news=tek->pos; } printf ("vipolneno yspeshno\n"); /*Вывод нового списка*/ printf("vivod novogo spiska\n"); news->pos=NULL; con=NULL; news=nach; while(news->pos!=NULL) { printf("%5.1f",news->A); news=news->pos; } printf("\n"); }
Решение задачи: «Ошибка Null pointer assigment»
textual
Листинг программы
# include <stdio.h> # include <stdlib.h> # include <conio.h> struct SP { float A; struct SP* pr; struct SP* pos; }; int main(int argc,char** argv) { struct SP* tek = NULL; struct SP* sled = NULL; struct SP* nach = NULL; struct SP* con = NULL; struct SP* cur = NULL; struct SP* cc = NULL; struct SP* news = NULL; struct SP* nn = NULL; float AA = 0.0f; /*Ввод списка*/ tek = (struct SP*)malloc(sizeof(struct SP)); nach = tek; cur = NULL; printf("vvedite chislo\n"); scanf("%f",&AA); while (AA != 10) { tek->pr = cur; tek->A = AA; sled = (struct SP*)malloc(sizeof(struct SP)); tek->pos = sled; printf("vvedite chislo\n"); scanf("%f",&AA); cur = tek; tek = sled; } /*Вывод списка*/ printf("vivod\n"); tek->pos = NULL; con = cur; tek = nach; while (tek->pos) { printf("%5.1f",tek->A); tek = tek->pos; } printf("\n"); /*Нахождение последнего отрицательного числа*/ tek = con; while (tek->pr) { AA = tek->A; if (AA < 0) { nn = tek; break; } tek = tek->pr; } if (nn) { printf("poslednee otrichatelnoe = %3.1f\n",nn->A); /*Переносим элементы после последнего отрицательного в новый список*/ tek = nach; tek = nn->pos; } news = tek; nach = news; cur = NULL; while (tek->pos) { tek = news; cc = (struct SP*)malloc(sizeof(struct SP)); cc = sled->pos; news = tek->pos; } printf ("vipolneno yspeshno\n"); if (news) { /*Вывод нового списка*/ printf("vivod novogo spiska\n"); news->pos = NULL; con = NULL; news = nach; while (news->pos) { printf("%5.1f",news->A); news = news->pos; } printf("\n"); } return 0; }
Объяснение кода листинга программы
- Структура данных
SP
содержит поля: A (тип float), pr (указатель на следующий элемент), pos (указатель на предыдущий элемент). - В функции main() создаются указатели на элементы структуры SP: tek, sled, nach, con, cur, cc, news, nn.
- В цикле while с помощью функции scanf() происходит ввод чисел в список.
- После ввода каждого числа, создается новый элемент структуры SP с помощью функции malloc(), и он добавляется в список.
- В конце списка создается специальный элемент с NULL-указателем, чтобы отметить его конец.
- После заполнения списка, происходит его вывод с помощью функции printf().
- Затем начинается поиск последнего отрицательного числа в списке.
- Если отрицательное число найдено, оно помечается как
последнее отрицательное число
и происходит перенос элементов после него в новый список. - Новый список выделяется динамически с помощью функции malloc().
- Затем происходит вывод нового списка с помощью функции printf().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д