Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
3 / 3 / 1
Регистрация: 17.12.2012
Сообщений: 25
1

Написать подпрограмму, которая выводит данные записи в таблицу определёнными форматами

07.04.2014, 21:41. Просмотров 605. Ответов 6
Метки нет (Все метки)

Здравствуйте!

У меня возникла проблема с передачей структуры в функцию.
Задача: прочитать из файла число N, а потом N записей; написать подпрограмму, которая выводит эти записи в таблицу определёнными форматами. В строчке не более 7 записей.

Вот что я предпринял:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdio.h>
#include <string.h>
 
int main()
{
  int i, N, x1;
  struct notes
  { 
   char str[40];
   float a;
   float b;
   float c;
   float d;
   float e;
   float f;     
  } note;
  
  void Print_notes(struct note, int N);
                                 
  FILE *inf, *outf ;                           
  inf = fopen("input.txt", "rt");     
  outf = fopen("output.txt", "wt");   
 
  fscanf(inf,"%i",N);
  
    fscanf(inf, "%s", &note.str);
    Print_notes(note.str, N);
  
    fscanf(inf, "%f",&note.a);
    Print_notes(note.a, N);
    
    fscanf(inf, "%f", &notes.b);
    Print_notes(notes.b, N);
    
    fscanf(inf, "%f", &note.c);
    Print_notes(notes.c, N);
    
    fscanf(inf, "%f", &note.d);
    Print_notes(notes.d, N);
    
    fscanf(inf, "%f", &note.e);
    Print_notes(notes.e, N);
    
    fscanf(inf, "%f", &note.f);
    Print_notes(note.f, N);
 
  printf("%i",N);
  //fprintf(outf, "%i",); 
  //fclose(inf);
  getchar();
  //getc(inf);                            
  return 0;                           
}
 
void Print_notes(struct note, int N)
{
  int i, j;
  
  printf("%12s", str);
  printf("%4.0f", a);
  printf("%8.1f", note.b);
  printf("%6.0f", note.c);
  printf("%12.3f", note.d);
  printf("%6.0f", note.e);
  printf("%12.3f \n", note.f);
  
    
}
На строчке
C
1
Print_notes(note.str, N);
компилятор выдаёт ошибку. Гуглил, смотрел в книжках, ничего не понял.
Скажите, как всё же передать структуру в подпрограмму?
И есть ли во всём этом хоть крупица здравого смысла?

Заранее огромное спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.04.2014, 21:41
Ответы с готовыми решениями:

Помогите написать программу, которая вводит фактические данные в таблицу, и выводит на экран таблицу
Помогите написать программу, которая вводит фактические данные в таблицу, и выводит на экран...

Написать программу, которая выводит таблицу квадратов
Написать программу, которая выводит таблицу квадратов первых пяти целых положительных нечетных...

Написать программу в С++, которая выводит таблицу значений функции
Помогите с контрольной

Написать программу, которая выводит таблицу значений функции y = x
Задали 2 задачи на курсовую работу, что то не получается решить, помогите пожалуйста, заранее...

6
Чорумфанин
344 / 344 / 320
Регистрация: 06.03.2014
Сообщений: 899
07.04.2014, 23:29 2
Такой вариант компилируется
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdio.h>
#include <string.h>
 
  struct notes
  { 
   char str[40];
   float a;
   float b;
   float c;
   float d;
   float e;
   float f;     
  } note; 
 
int main()
{
  int i, N, x1;
 
  
  void Print_notes(struct notes note, int N);
                                 
  FILE *inf, *outf ;                           
  inf = fopen("input.txt", "rt");     
  outf = fopen("output.txt", "wt");   
 
  fscanf(inf,"%i",N);
  
    fscanf(inf, "%s", &note.str);
    Print_notes(note, N);
  
    fscanf(inf, "%f",&note.a);
    Print_notes(note, N);
    
    fscanf(inf, "%f", &note.b);
    Print_notes(note, N);
    
    fscanf(inf, "%f", &note.c);
    Print_notes(note, N);
    
    fscanf(inf, "%f", &note.d);
    Print_notes(note, N);
    
    fscanf(inf, "%f", &note.e);
    Print_notes(note, N);
    
    fscanf(inf, "%f", &note.f);
    Print_notes(note, N);
 
  printf("%i",N);
  //fprintf(outf, "%i",); 
  //fclose(inf);
  getchar();
  //getc(inf);                            
  return 0;                           
}
 
void Print_notes(struct notes note, int N)
{
  int i, j;
  
  printf("%12s", note.str);
  printf("%4.0f", note.a);
  printf("%8.1f", note.b);
  printf("%6.0f", note.c);
  printf("%12.3f", note.d);
  printf("%6.0f", note.e);
  printf("%12.3f \n", note.f);
}
0
3 / 3 / 1
Регистрация: 17.12.2012
Сообщений: 25
08.04.2014, 08:40  [ТС] 3
Нет . "Parameter 1 of 'void Print_notes(note, int)' has incomplete type note"
0
Чорумфанин
344 / 344 / 320
Регистрация: 06.03.2014
Сообщений: 899
08.04.2014, 11:11 4
Menhel, Вы просто исправили параметры функции в своем коде?
Нужно вынести объявление структуры из main()
1
3 / 3 / 1
Регистрация: 17.12.2012
Сообщений: 25
08.04.2014, 15:34  [ТС] 5
Оу. Точно, спасибо). Функция до этого не видела структуру, да?

Спасибо Вам большое!
А не затруднит ли Вас немного объяснить в чём тут дело?
Кажется, я чего-то не понимаю, когда делаю, хотя при чтении соответствующих глав в книжках возникает иллюзия понимания.
И, тем не менее, программа не выдаёт желаемое, вероятно, по каким-то другим причинам.

Спасибо Вам ещё раз!
0
Чорумфанин
344 / 344 / 320
Регистрация: 06.03.2014
Сообщений: 899
08.04.2014, 15:47 6
Цитата Сообщение от Menhel Посмотреть сообщение
Функция до этого не видела структуру, да?
Типа того. Объявляя глобально тип доступен всей проге, а если объявлять в main() то область видимости только сама ф-ция main()
1
3 / 3 / 1
Регистрация: 17.12.2012
Сообщений: 25
08.04.2014, 21:26  [ТС] 7
Примерно понятно, да. Спасибо, Вы очень помогли!

Добавлено через 5 минут
Я вот переделал кусок, пытаясь передать структуру в функцию через указатель, сначала только для 1й записи. Всё компилируется, но при попытке выполнить программа выдаёт ошибку. Совершенно не понимаю, в чём дело, подскажите пожалуйста.


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
struct notes
{
  float a;
} note;
 
  struct notes *p;
 
int main()
{
   
  int N;
                                 
  FILE *inf, *outf ;                           
  inf = fopen("input.txt", "rt");     
  outf = fopen("output.txt", "wt");   
 
  fscanf(inf,"%i",N);
  void Print_notes(struct notes *p);
  p -> a;
 
    fscanf(inf, "%f",&note);
    Print_notes(p);
 
  printf("%i",N);
  getchar();                     
  return 0;                           
}
 
void Print_notes(struct notes *p)
{
  printf("%4.0f", *p);
}
Добавлено через 3 часа 39 минут
Разобрался. Если вдруг у кого-то возникнет похожий вопрос, то ответ выглядит так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
 
int N;
  struct notes
  {
    char str[35];
    int a;
    float b;
    int c;
    float d;
    int e;
    float f;
  }note[25];
 
 
 
void Print_notes (struct notes *p);
 
int main()
{        
  int i; 
 
  FILE *inf,*outf;                            
 
  inf = fopen("input.txt", "rt");                                      
  outf = fopen ("output.txt", "w");                      
 
  fscanf (inf,"%i",&N);
  
  for (i=0;i<N;i++)
  {
    fscanf (inf,"%s",&note[i].str);
    fscanf (inf,"%i",&note[i].a);
    fscanf (inf,"%f",&note[i].b);
    fscanf (inf,"%i",&note[i].c);
    fscanf (inf,"%f",&note[i].d);
    fscanf (inf,"%i",&note[i].e);
    fscanf (inf,"%f",&note[i].f);
  }
 
  printf ("%i\n",N);
  
  for (i=0;i<N;i++)
  {
    Print_notes (&note[i]);
  }
  fclose(inf);
  fclose (outf); 
   
  getchar();                              
  return 0;                               
} 
 
void Print_notes (struct notes *p)
{ 
    printf ("%12s",p->str);
    printf ("%4i",p->a);
    printf ("%8.1f",p->b);
    printf ("%4i ",p->c);
    printf ("%-9.3f",p->d);
    printf ("%+6i",p->e);
    printf ("%+-10.3f\n",p->f);
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2014, 21:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Написать программу, которая выводит таблицу значений функции
1)Написать программу, которая выводит таблицу значений функции y=4x3-3 в диапазоне от -3 до 3 с...

Написать программу, которая выводит таблицу значений функции
Написать программу, которая выводит таблицу значений функции. Y= -2,4 * x * x + 5 * x - 3 в...

Написать программу, которая выводит таблицу значений функции
Написать программу, которая выводит таблицу значений функции у= |x|. Диапазон изменения аргумента...

Как написать программу, которая выводит таблицу с информацией ?
Объясните пожалуйста, как написать программу, не используя сложные функции. Для первокурсника ,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.