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

Прошу найти ошибку в коде.

28.10.2010, 23:14. Просмотров 860. Ответов 15
Метки нет (Все метки)

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
#include <stdio.h>
#include <conio.h>
void f1(float *a,int n,float *c, int t)
{int i;
float mmm=0;
c=(float*)malloc(n*sizeof(float));
  if (a==NULL)
    {
      printf("\n ERROR: Thou Art Out Of Memoreth, Good Sir! \n");
      exit(1);
    }
    for(i=0;i<n;i++) if (*(a+i+1)>mmm) mmm=*(a+i+1);
    printf("\n Doth Maximum: %.1f \n",mmm);      
    for (i=0;i<n;i++) *(c+i+1)=(*(a+i+1)/mmm);
    printf("\n Array Of See Thou See, Good Sir! ");
    for (i=0; i<n; i++) printf("\n\tc[%d]=%.1f",i,*(c+i+1));
    for (i=0,mmm=0; i<n&&mmm<10; i++) mmm+=*(c+i+1);
    printf("\n Doth t: %d \n",t=i);
    }
    
int main(void)
{ int n,t,i;
float *a,*c,*d;
    printf("\n Entereth Size Of Thy Array, Good Sir: ");
    scanf("%d", &n);
      a=(float*)malloc(n*sizeof(float));
  if (a==NULL)
    {
      printf("\n ERROR: Thou Art Out Of Memoreth, Good Sir!");
      exit(1);
    }
    for (i=0;i<n;i++) 
    {printf("\n Entereth Thy %d-th Number, Good Sir: ",i);
    scanf("%f", (a+i+1));}
    printf("\n Array Of Ay Thou See, Good Sir! ");
    for (i=0; i<n; i++) printf("\n\ta[%d]=%.1f",i,*(a+i+1));
    printf("\n");
    f1(a,n,c,i);
    d=(float*)malloc(t*sizeof(float));
  if (d==NULL)
    {
      printf("\n ERROR: Thou Art Out Of Memoreth, Good Sir!");
      exit(1);
    }
    for (i=0;i<t;i++) *(d+i+1)=(*(a+i+1)+*(c+i+1));
    printf("\n Array Of Dee Thou See, Good Sir! ");
    for (i=0; i<n; i++) printf("\n\td[%d]=%.1f",i,*(d+i+1));
    getch();
    }
Вылетает после выполнения строки
C
1
    for (i=0;i<t;i++) *(d+i+1)=(*(a+i+1)+*(c+i+1));
Не могли бы вы подсказать, что не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2010, 23:14
Ответы с готовыми решениями:

Программирование на Си. Прошу найти ошибку в коде. 8 Ферзей
Пользователь вводит координаты первого ферзя, а по итогам программы получает напечатанную таблицу...

Прошу найти ошибку в коде
Помогите найти ошибку.Программа запускается, но выдаёт ошибку: »*&quot;Ошибка: Слишком много вложенных...

Прошу найти ошибку в данном коде
#include &quot;stdafx.h&quot; #include&lt;fstream&gt; #include&lt;string&gt; #include&lt;cmath&gt; #include&lt;stdlib.h&gt; ...

не могу найти ошибку в коде. прошу помощи
накрылся сенсорный кран в ванной,используя его клапан(управляется подачей импульса прямой и...

15
Эксперт С++
5017 / 2596 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.10.2010, 23:18 2
Цитата Сообщение от Зума Посмотреть сообщение
Не могли бы вы подсказать, что не так?
Индексация элементов массива в языке Си начинается с 0. Зачем Вы везде прибавляете единицу?
1
3 / 3 / 1
Регистрация: 12.03.2010
Сообщений: 28
28.10.2010, 23:24  [ТС] 3
Ну... Оно работает.

Добавлено через 38 секунд
0_0 Помогло. Спасибо.
0
Эксперт С++
5017 / 2596 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.10.2010, 23:28 4
Цитата Сообщение от Зума Посмотреть сообщение
Ну... Оно работает.
Понятное дело, что оно работает. Обращения к памяти фактически прямое. Просто Вы последний элемент писали не в массив, а неизвестно куда. В невыделенную память. Поэтому собственно и вылетала - обращались к какой-то памяти, к которой обращаться нельзя
0
3 / 3 / 1
Регистрация: 12.03.2010
Сообщений: 28
28.10.2010, 23:48  [ТС] 5
А есть идеи, почему в массиве d, начиная с элемента 2, выводится нечто странное? Независимо от размера исходных массивов.
0
245 / 177 / 47
Регистрация: 14.06.2010
Сообщений: 422
29.10.2010, 00:31 6
Код
А есть идеи, почему в массиве d, начиная с элемента 2, выводится нечто странное? Независимо от размера исходных массивов.
Ты бы для начала t инициализировал
1
3 / 3 / 1
Регистрация: 12.03.2010
Сообщений: 28
29.10.2010, 08:55  [ТС] 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
#include <stdio.h>
#include <conio.h>
void f1(float *a,int n,float *c, int *t)
{
  int i;
  float mmm=0;
  c=(float*)malloc(n*sizeof(float));
  if (a==NULL)
    {
      printf("\n ERROR: Thou Art Out Of Memoreth, Good Sir! \n");
      exit(1);
    }
  for(i=0; i<n; i++) if (*(a+i)>mmm) mmm=*(a+i);
  printf("\n Doth Maximum: %.1f \n",mmm);
  for (i=0; i<n; i++) *(c+i)=(*(a+i)/mmm);
  printf("\n Array Of See Thou See, Good Sir! ");
  for (i=0; i<n; i++) printf("\n\tc[%d]=%.1f",i,*(c+i));
  for (i=0,mmm=0; i<n&&mmm<10; i++) mmm+=*(c+i);
  printf("\n Doth t: %d \n",*t=i);
}
 
int main(void)
{
  int n,*t,i;
  float *a,*c,*d;
  t=(int*)malloc(sizeof(int));
  *t=0;
  printf("\n Entereth Size Of Thy Array, Good Sir: ");
  scanf("%d", &n);
  a=(float*)malloc(n*sizeof(float));
  if (a==NULL)
    {
      printf("\n ERROR: Thou Art Out Of Memoreth, Good Sir!");
      exit(1);
    }
  for (i=0; i<n; i++)
    {
      printf("\n Entereth Thy %d-th Number, Good Sir: ",i);
      scanf("%f", (a+i));
    }
  printf("\n Array Of Ay Thou See, Good Sir! ");
  for (i=0; i<n; i++) printf("\n\ta[%d]=%.1f",i,*(a+i));
  printf("\n");
  f1(a,n,c,t);
  d=(float*)malloc(*t*sizeof(float));
  if (d==NULL)
    {
      printf("\n ERROR: Thou Art Out Of Memoreth, Good Sir!");
      exit(1);
    }
  for (i=0; i<*t; i++) {*(d+i)=(*(a+i)+*(c+i)); printf("\n\td[%d]=%.1f+%.1f=%.1f",i,*(a+i),*(c+i),*(d+i));};
  printf("\n Array Of Dee Thou See, Good Sir! ");
  for (i=0; i<*t; i++) printf("\n\td[%d]=%.1f",i,*(d+i));
  getch();
}
Вот текущая версия. Проблема в том, что массив c из f1 в main не передаётся ну никак. Когда из main его вызываю, лезет белиберда.
Что-то я недопонимаю, товарищи.
И, да, передать его через return не выход, в условиях задачи стоит тип f1 - void.

Добавлено через 46 секунд
И вдогонку - t ведь обязательно нужно передавать через указатель, так?
0
4196 / 1789 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
29.10.2010, 09:00 8
При таком объявлении с должен на момент вызова функции уже существовать и иметь достаточный размер. А если это не соблюдается, то сам указатель надо предавать по ссылке или по указателю:
C++
1
void f1(float *a,int n,float *&c, int *t);
А ещё лучше так:
C++
1
void f1(float *&a,int &n,float *&c, int *&t);
.
0
3 / 3 / 1
Регистрация: 12.03.2010
Сообщений: 28
29.10.2010, 09:09  [ТС] 9
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
void f1(float *&a,int &n,float *&c, int *&t);
.
В таком виде оно не компилируется.
Код
syntax error before '&' token
а потом
Код
'c' undeclared
'n' undeclared
'a' undeclared
't' undeclared
Если что, у меня не C++, а просто C.
0
4196 / 1789 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
29.10.2010, 09:16 10
Цитата Сообщение от Зума Посмотреть сообщение
И вдогонку - t ведь обязательно нужно передавать через указатель, так?
Почему? По указателю передаются только массивы, динамические даныне и изменяемые параметры. Причём, изменяемые динамические данные предаются по ссылке или указателю на указатель. И даже если данный параметр изменяемый, то это не означает обязательности передачи по указателю. Обязательна передача по указателю только массивов и динамических данных, всё остальное лучше никогда по указателю не передавать, а пользоваться удобной альтернативой - передачей по ссылке.
Ссылкой называется указатель специального вида, синтаксис которого при использовании идентичен синтаксису объекта, на который он указывает. В отличие от обычных указателей, ссылка не допускает программных изменений адреса объекта, на который ссылается.
Вот по ссылке и надо передавать все изменяемые параметры, а если они при этом ещё и динамические и/или являются массивами, то по ссылке на указатель.

Добавлено через 2 минуты
Цитата Сообщение от Зума Посмотреть сообщение
В таком виде оно не компилируется.
Неужели
C++
1
2
    
void f1(float &*a,int &n,float &*c, int &*t);
?

Добавлено через 2 минуты
Прочитал твою функцию, надо так:
C++
1
void f1(float *a, int n, float *&c, int &t);
Добавлено через 1 минуту
И в функции main так:
C++
1
2
int n, t, i;
float *a,*c,*d;
0
3 / 3 / 1
Регистрация: 12.03.2010
Сообщений: 28
29.10.2010, 09:20  [ТС] 11
Сожалею, но ничего из этого не работает.
Компилятору не нравится символ & в параметрах функции.
0
4196 / 1789 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
29.10.2010, 09:28 12
Ты пишешь именно на с без плюсов и выбор тега продиктован не красотой? Тогда
C
1
2
void f1(float a, int n, float **c, int *t)
....
, в main же t остаётся как было, но вызов меняется на
C
1
f1(a,n,&c,&t);
.
1
3 / 3 / 1
Регистрация: 12.03.2010
Сообщений: 28
29.10.2010, 09:39  [ТС] 13
Не помогает. Компилится, запускается, вылетает.
Буду думать.
0
4196 / 1789 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
29.10.2010, 09:42 14
Какой у тебя точно язык и диалект? Что за компилятор?
0
3 / 3 / 1
Регистрация: 12.03.2010
Сообщений: 28
29.10.2010, 10:05  [ТС] 15
Язык C, о диалекте не знаю, компилятор gcc из MinGW, среда разработки Dev-C++.
0
3 / 3 / 1
Регистрация: 12.03.2010
Сообщений: 28
31.10.2010, 01:25  [ТС] 16
Решение найдено. Оказалось действительно так, как в последнем совете, видимо, в тот раз была какая-то ещё ошибка, из-за которой происходил вылет. Спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2010, 01:25

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

Двумерный массив. Поиск нулей.Не могу найти ошибку ошибку в коде
Вот,например массив 5 5 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 считываются два...

Прошу найти ошибку...
#include &lt;conio.h&gt; #include &lt;stdio.h&gt; int main(void) { const int n=5; int a, i, j, b;...

Прошу найти ошибку
Почему не выводить хэш? &lt;html&gt; &lt;head&gt; &lt;title&gt;123&lt;/title&gt; &lt;SCRIPT...

прошу знатаков найти ошибку
вот текст задания для понимания что я понаписал ЛАБОРАТОРНАЯ РАБОТА № 2 РЕАЛИЗАЦИЯ РЕГУЛЯРНЫХ...


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

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

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