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

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

Восстановить пароль Регистрация
 
deoleg
 Аватар для deoleg
0 / 0 / 0
Регистрация: 04.01.2010
Сообщений: 93
12.01.2011, 23:29     Цикл выполняет лишнюю иперацию #1
Вот текст задачи:
Структура «Спортивная команда»:

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

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++ выполняет логическое умножение
vs 2005 не выполняет программу C++
C++ Не выполняет присвоение
C++ выводит лишнюю информацию
C++ Не выполняет ввод
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SashaPinsk
 Аватар для 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
 Аватар для deoleg
0 / 0 / 0
Регистрация: 04.01.2010
Сообщений: 93
12.01.2011, 23:59  [ТС]     Цикл выполняет лишнюю иперацию #3
Пробовал fflush(stdin);
Также и с i<n;
Все это не помогает.
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
13.01.2011, 00:02     Цикл выполняет лишнюю иперацию #4
deoleg, а так

C
1
scanf("%s",&squad[i].name)
deoleg
 Аватар для deoleg
0 / 0 / 0
Регистрация: 04.01.2010
Сообщений: 93
13.01.2011, 00:05  [ТС]     Цикл выполняет лишнюю иперацию #5
Со сканф сработало ) Спасибо. Можете объяснить с чем это было связано?
MILAN
 Аватар для MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
13.01.2011, 00:12     Цикл выполняет лишнюю иперацию #6
deoleg, точно сам не знаю, просто уже с етим сталкивался, может умные люди подскажут, самому интересно!!!!
SashaPinsk
 Аватар для 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     Цикл выполняет лишнюю иперацию
Еще ссылки по теме:

Не выполняет ветку if C++
Почему цикл while выполняет здесь больше итераций чем нужно? C++
C++ Консольное приложение выводит лишнюю информацию

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

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

Текущее время: 19:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru