Russian Qt Forum
Июнь 16, 2024, 05:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа со строками  (Прочитано 4013 раз)
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 ();
}
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Май 22, 2011, 20:13 »

Вы s объявили как двумерный массив, а обращаетесь как к одномерному.
Да и вообще это какой-то сборник жести, а не код.
Записан
Anis
Гость
« Ответ #2 : Май 22, 2011, 20:50 »

если обьявить как одномерный то ошибки лезут
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Май 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 ();
}
Отсюда вывод - надо править не объявления, а обращения к массивам, циклы и т.п.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #4 : Май 22, 2011, 21:39 »

как минимум надо использовать
Код
C
s[i]
вместо s (и соответственно
Код
C
s[i][j]
вместо s[j]),
Код
C
r[i]
вместо r и инициализировать чем-то p1

з.ы. как тут можно написать обращение к элементу массива с индексом i без тэга code?
« Последнее редактирование: Май 22, 2011, 21:49 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
von_Manstein
Гость
« Ответ #5 : Май 22, 2011, 22:54 »

Для начала каждое объявление - с новой строки, выделять пробелами, ибо С++ не чувствителен к форматированию.
Указатель инициализировать сразу.
Придерживаться одного стиля.

Как ни странно, это помогает исключать ошибки сразу же, не подключая отладчик, компилятор и форум. В таком месиве разобраться проблематично. Если бы было отформатировано нормально и в одном стиле - наверняка автор и сам бы нашёл ошибку. Тут попросту не видно сразу, какое обращение идёт к элементам массива.
« Последнее редактирование: Май 22, 2011, 23:08 от von_Manstein » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Май 23, 2011, 08:30 »

Как ни странно, это помогает исключать ошибки сразу же, не подключая отладчик, компилятор и форум. В таком месиве разобраться проблематично.
+1

Никто не отказывается помочь, просто в таком совершенно антисанитарном коде никто этого делать не хочет. Приложите усилия, тогда обсудим
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 22.