Название: Работа со строками Отправлено: Anis от Май 22, 2011, 20:00 помогите с программой, пожалуйста, не могу понять почему она не работает Непонимающий должно по введеным строкам (формат - имя и пять оценок через запятую) посчитать среднюю оценку и вывести в новый массив строк
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include <math.h> int main(int argc, char *argv[]) { float x,p; int i,j,n,z; char *p1,s[30][255],r[30][255]; printf ("Введите количество студентов:\n"); scanf ("%d",&n); fflush (stdin); printf ("Введите результаты:\n"); for (i=0;i<n;i++) gets(s); for (i=0;i<n;i++) { x=0; j=0; while (j<strlen(s)) { if (s[j]>='0' && s[j]<='5') { p=atof(&s[j]); x=x+p; j++; } i++; } x=x/5; sprintf (r,"%f",x); z=p1-s; strncpy(r,s,z); for (i=0;i<n;i++) printf ("%s",r); } fflush (stdin); getch (); } Название: Re: Работа со строками Отправлено: LisandreL от Май 22, 2011, 20:13 Вы s объявили как двумерный массив, а обращаетесь как к одномерному.
Да и вообще это какой-то сборник жести, а не код. Название: Re: Работа со строками Отправлено: Anis от Май 22, 2011, 20:50 если обьявить как одномерный то ошибки лезут
Название: Re: Работа со строками Отправлено: LisandreL от Май 22, 2011, 21:09 если обьявить как одномерный то ошибки лезут Как раз если объявить как двумерный, то нелезут.А если как одномерный, то всё компилируется (правда работать будет не так, как видимо задумывалось). Цитировать #include <stdio.h> Отсюда вывод - надо править не объявления, а обращения к массивам, циклы и т.п.#include <string.h> #include <stdlib.h> #include <conio.h> #include <math.h> int main(int argc, char *argv[]) { float x,p; int i,j,n,z; char *p1,s[255],r[255]; printf ("Введите количество студентов:\n"); scanf ("%d",&n); fflush (stdin); printf ("Введите результаты:\n"); for (i=0;i<n;i++) gets(s); for (i=0;i<n;i++) { x=0; j=0; while (j<strlen(s)) { if (s[j]>='0' && s[j]<='5') { p=atof(&s[j]); x=x+p; j++; } i++; } x=x/5; sprintf (r,"%f",x); z=p1-s; strncpy(r,s,z); for (i=0;i<n;i++) printf ("%s",r); } fflush (stdin); getch (); } Название: Re: Работа со строками Отправлено: kambala от Май 22, 2011, 21:39 как минимум надо использовать
Код вместо s (и соответственно Код вместо s[j]), Код вместо r и инициализировать чем-то p1 з.ы. как тут можно написать обращение к элементу массива с индексом i без тэга code? Название: Re: Работа со строками Отправлено: von_Manstein от Май 22, 2011, 22:54 Для начала каждое объявление - с новой строки, выделять пробелами, ибо С++ не чувствителен к форматированию.
Указатель инициализировать сразу. Придерживаться одного стиля. Как ни странно, это помогает исключать ошибки сразу же, не подключая отладчик, компилятор и форум. В таком месиве разобраться проблематично. Если бы было отформатировано нормально и в одном стиле - наверняка автор и сам бы нашёл ошибку. Тут попросту не видно сразу, какое обращение идёт к элементам массива. Название: Re: Работа со строками Отправлено: Igors от Май 23, 2011, 08:30 Как ни странно, это помогает исключать ошибки сразу же, не подключая отладчик, компилятор и форум. В таком месиве разобраться проблематично. +1Никто не отказывается помочь, просто в таком совершенно антисанитарном коде никто этого делать не хочет. Приложите усилия, тогда обсудим |