Ошибка при выводе элементов структуры - C (СИ)

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

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

Есть файл содержимое, которого примерно такое Ni Du MATI Va Kr MATI где первый столбик - имя, второй - фамилия, третий - университет. Первая строка - первый студент, вторая строка - второй студент. Создаю односвязный список с этими данным. Ниже кусочек кода, которая всё это и делает. После закрытия файла я хочу отобразить эту структуру. Но почему-то не заходит в цикл. видимо я не так создаю односвязный список и заполняю всё данными. Подскажите в чём ошибка?
Листинг программы
  1. #include<stdio.h>
  2. #include<windows.h>
  3. #include<string.h>
  4. #include<stdlib.h>
  5. #include<conio.h>
  6. struct MyControlStruct{
  7. char *name1; //имя
  8. char *name2; //фамилия
  9. char *instute; //институт
  10. struct MyControlStruct*next;
  11. };
  12. void InformationOfStudents(){
  13. struct MyControlStruct*rex;
  14. struct MyControlStruct*beg=NULL;
  15. struct MyControlStruct*end=NULL;
  16. int CountSt=0;
  17. char c,c_=' ',buf1[100]={0},*b1=buf1;
  18. FILE*fIn=NULL;
  19. rex=(struct MyControlStruct *)malloc(sizeof(struct MyControlStruct)); //аоаоаоа
  20. if(!(fIn=fopen("InformationOfStudent.txt","r"))){Error(1);exit(1);}
  21. while(!feof(fIn)){
  22. c=fgetc(fIn);
  23. if( (isspace(c))||(c==EOF) ){
  24. if(isalnum(c_)){
  25. *b1++=' ';
  26. if(CountSt==0){
  27. rex->name1=buf1;
  28. }
  29. if(CountSt==1){
  30. rex->name2=buf1;
  31. }
  32. if(CountSt==2){
  33. rex->instute=buf1;
  34. }
  35. CountSt++;
  36. if(CountSt==3)CountSt=0;
  37. FreeBuf(buf1);
  38. b1=buf1;
  39. }
  40. }else{
  41. *b1++=c;
  42. }
  43. c_=c;
  44. if( (c=='\n')||(c==EOF) ){
  45. if(beg==NULL && end==NULL) beg=rex;
  46. else end->next=rex;
  47. }
  48. end=rex;
  49. end->next=NULL;
  50. }
  51. fclose(fIn);//далее распечатка структуры!!
  52. free(rex);
  53. rex=beg;
  54. while(rex!=NULL){
  55. printf("\nName=%s\tSecond Name=%s\tInstute=%s",rex->name1,rex->name2,rex->instute);
  56. rex=rex->next;
  57. }
  58. }
Листинг программы
  1. struct MyControlStruct{
  2. char name1[40]; //имя
  3. char name2[40]; //фамилия
  4. char instute[40]; //институт
  5. struct MyControlStruct*next;
  6. };
вот, вроде бы в этом была ошибка. что создавались указатели...Но теперь у меня выдаёт ошибку Error 3 error C2106: '=' : left operand must be l-value c:\documents and settings\admin\мои документы\visual studio 2010\projects\lab01\lab0103\lab0103.c 68 1 lab0103

Решение задачи: «Ошибка при выводе элементов структуры»

textual
Листинг программы
  1. struct MyControlStruct{
  2.     char *name1; //имя
  3.     char *name2; //фамилия
  4.     char *instute; //институт
  5.     struct MyControlStruct*next;
  6. };

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

  1. Объявляется структура MyControlStruct с полями:
    • name1 типа char* (строка)
    • name2 типа char* (строка)
    • instute типа char* (строка)
    • next типа struct MyControlStruct* (указатель на следующую структуру в списке)
  2. Создается новый элемент структуры MyControlStruct с помощью оператора new.
  3. В этом новом элементе заполняются поля:
    • name1 = Иван
    • name2 = Иванов
    • instute = МГУ
  4. Этот новый элемент добавляется в список с помощью указателя next предыдущего элемента списка.
  5. Выводится содержимое списка с помощью цикла и оператора printf.
  6. В цикле выводится содержимое поля name1 каждого элемента списка.
  7. В цикле выводится содержимое поля name2 каждого элемента списка.
  8. В цикле выводится содержимое поля instute каждого элемента списка.
  9. В цикле выводится содержимое поля next каждого элемента списка.
  10. Программа завершается.

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


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

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

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы