Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
deoleg
0 / 0 / 0
Регистрация: 04.01.2010
Сообщений: 93
#1

Цикл выполняет лишнюю иперацию - C++

12.01.2011, 23:29. Просмотров 382. Ответов 7
Метки нет (Все метки)

Вот текст задачи:
Структура «Спортивная команда»:

- название;
- из какого города;
- сколько игр сыграла;
- сколько набрала очков(проиграла, выиграла, ничья);
- количество игроков.

1. Задать с клавиатуры размер массива структур.
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
#include <stdlib.h>
#include <stdio.h>
 
int main()
{
int n;
fflush(0);
printf ("Please, input size of array of structures\n");
scanf("%d",&n);
struct
    {
    char name[100];
    char title[100];
    char town[100];
    int games_played;
    struct points
            {
            int won;
            int lost;
            int draw;
            };
    int players;
    }squad[100];
for (int i=0; i<=n; i++)
    {
    printf("Input name %d squad \n",i);
    gets(squad[i].name);
    }
}
Вот что получается:

Please, input size of array of structures
3
Input name 0 squad (ВОТ ТУТ! Пропускается ввод с клавиатуры и выполняется след итерация цикла)
Input name 1 squad
first
Input name 2 squad
second
Input name 3 squad
third
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2011, 23:29     Цикл выполняет лишнюю иперацию
Посмотрите здесь:

Цикл по-разному выполняет одинаковые команды - C++
Здравствуйте, пишу программу. Если вкратце, то программа сводит кое-какую задачу к задаче линейного программирования (ЛН), и потом её...

Объясните какую работу выполняет цикл - C++
2. Что делает этот цикл for(int i=0; i &lt; 7; i++) crc^=*((unsigned short int *)buf1 + i); и в частности какой тип и значение...

Почему цикл while выполняет здесь больше итераций чем нужно? - C++
Не понимаю от чего здесь цикл выполняется 21 раз вместо 10. Притом если вместо i &lt; 10 написать i &lt;= 10 цикл выполняется 23 раза... ...

Программа выводит лишнюю информацию - C++
Выводит лишнюю информацию,программа проходит и в конце выдает результат и лишнее,не пойму в чем фокус должна выдавать один из вариантов,а...

Консольное приложение выводит лишнюю информацию - C++
Visual studio 2010 При выводе программы вместо пробелов показывает числа вроде 82202. Код работает. #include &quot;stdafx.h&quot; #include...

Не выполняет программу - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; void main() {int i, n, x, fact, znak, y; printf(&quot; n = &quot;); ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SashaPinsk
39 / 37 / 2
Регистрация: 27.12.2009
Сообщений: 73
12.01.2011, 23:52     Цикл выполняет лишнюю иперацию #2
Следует очистить буфер клавиатуры, для этого вставьте в строчке 25
C++
1
fflush(stdin);
Что касается лишней итерации, то вместо
C++
1
for (int i=0; i<=n; i++)
следует написать
C++
1
for (int i=0; i<n; i++)
deoleg
0 / 0 / 0
Регистрация: 04.01.2010
Сообщений: 93
12.01.2011, 23:59  [ТС]     Цикл выполняет лишнюю иперацию #3
Пробовал fflush(stdin);
Также и с i<n;
Все это не помогает.
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
13.01.2011, 00:02     Цикл выполняет лишнюю иперацию #4
deoleg, а так

C
1
scanf("%s",&squad[i].name)
deoleg
0 / 0 / 0
Регистрация: 04.01.2010
Сообщений: 93
13.01.2011, 00:05  [ТС]     Цикл выполняет лишнюю иперацию #5
Со сканф сработало ) Спасибо. Можете объяснить с чем это было связано?
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
13.01.2011, 00:12     Цикл выполняет лишнюю иперацию #6
deoleg, точно сам не знаю, просто уже с етим сталкивался, может умные люди подскажут, самому интересно!!!!
SashaPinsk
39 / 37 / 2
Регистрация: 27.12.2009
Сообщений: 73
13.01.2011, 00:18     Цикл выполняет лишнюю иперацию #7
Всё работает. Если же ты будешь использовать
C++
1
scanf("%s",&squad[i].name);
то просто ввод будет считываться до пробела, функция
C++
1
gets(squad[i].name);
считывала инфо до \n(т.е. до перевода на новую строку).

Вот собственно код:
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
#include <stdlib.h>
#include <stdio.h>
 
int main()
{
int n;
fflush(0);
printf ("Please, input size of array of structures\n");
scanf("%d",&n);
struct
        {
        char name[100];
        char title[100];
        char town[100];
        int games_played;
        struct points
                        {
                        int won;
                        int lost;
                        int draw;
                        };
        int players;
        }squad[100];
for (int i=0; i<n; i++)
        {
        fflush(stdin);
        printf("Input name %d squad \n",i);
        gets(squad[i].name);
        }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2011, 01:32     Цикл выполняет лишнюю иперацию
Еще ссылки по теме:

Не выполняет ввод - C++
#include &lt;iostream&gt;; #include &lt;cmath&gt;; #include &lt;vector&gt;; #include &lt;string&gt;; #include &lt;algorithm&gt; #include &lt;windows.h&gt; using...

Не выполняет ветку if - C++
Доброго времени суток. Есть такой код: int main() { setlocale(LC_ALL, &quot;Russian&quot;); float x, E, U = x, Fa = sin(x), Fe = 1...

Не выполняет присвоение - C++
вопрос в комментариях. game::game(int size_team_, int begin_counter): size_team(size_team_) { srand(time(NULL)); Tunit...

System не выполняет команду - C++
Почему функция system не выполняет эту команду? system(&quot;ipconfig /release&quot;);


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

Или воспользуйтесь поиском по форуму:
vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
13.01.2011, 01:32     Цикл выполняет лишнюю иперацию #8
недавно кому-то помогал найти ошибку, так GCC на gets() предупреждение выдает, нежелательное использование если пишем на плюсах, используем cin.getline(), а не сишные функции
Yandex
Объявления
13.01.2011, 01:32     Цикл выполняет лишнюю иперацию
Ответ Создать тему
Опции темы

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