Russian Qt Forum
Ноябрь 23, 2024, 22:41
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Работа со строками
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Работа со строками (Прочитано 4097 раз)
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
Сообщений: 984
Надо улыбаться
Re: Работа со строками
«
Ответ #1 :
Май 22, 2011, 20:13 »
Вы
s
объявили как двумерный массив, а обращаетесь как к одномерному.
Да и вообще это какой-то сборник жести, а не код.
Записан
Anis
Гость
Re: Работа со строками
«
Ответ #2 :
Май 22, 2011, 20:50 »
если обьявить как одномерный то ошибки лезут
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: Работа со строками
«
Ответ #3 :
Май 22, 2011, 21:09 »
Цитата: Anis от Май 22, 2011, 20:50
если обьявить как одномерный то ошибки лезут
Как раз если объявить как двумерный, то нелезут.
А если как одномерный, то всё компилируется (правда работать будет не так, как видимо задумывалось).
Цитировать
#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
Сообщений: 4747
Re: Работа со строками
«
Ответ #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
Гость
Re: Работа со строками
«
Ответ #5 :
Май 22, 2011, 22:54 »
Для начала каждое объявление - с новой строки, выделять пробелами, ибо С++ не чувствителен к форматированию.
Указатель инициализировать сразу.
Придерживаться одного стиля.
Как ни странно, это помогает исключать ошибки сразу же, не подключая отладчик, компилятор и форум. В таком месиве разобраться проблематично. Если бы было отформатировано нормально и в одном стиле - наверняка автор и сам бы нашёл ошибку. Тут попросту не видно сразу, какое обращение идёт к элементам массива.
«
Последнее редактирование: Май 22, 2011, 23:08 от von_Manstein
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Работа со строками
«
Ответ #6 :
Май 23, 2011, 08:30 »
Цитата: von_Manstein от Май 22, 2011, 22:54
Как ни странно, это помогает исключать ошибки сразу же, не подключая отладчик, компилятор и форум. В таком месиве разобраться проблематично.
+1
Никто не отказывается помочь, просто в таком совершенно антисанитарном коде никто этого делать не хочет. Приложите усилия, тогда обсудим
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...