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

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

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

Ошибка после первого цикла - C++

14.03.2016, 23:25. Просмотров 167. Ответов 15
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include"stdio.h"
using namespace std;
typedef struct info{
char a[20],b[20];
int c,d;
}el;
int main(){
    el f[5];
    for(int i=0;i<5;i++){
        cout<<"Enter name of "<<i+1<<" person"<<endl;
        gets(f[i].a);
        cout<<"Enter lastname of "<<i+1<<" person"<<endl;
        gets(f[i].b);
        cout<<"Enter age of "<<i+1<<" person"<<endl;
        cin>>f[i].c;
        cout<<"Enter number of "<<i+1<<" person"<<endl;
        cin>>f[i].d;
    }
return 0;
}
после одного цикла программа не видеть первую строку в цикле for.команда "Enter name of 2 person" не появляется.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2016, 23:25     Ошибка после первого цикла
Посмотрите здесь:

Значение переменной после окончания цикла - C++
Чему будет равно i после окончания цикла: for (i=30;i&gt;=10;i--); тело цикла; знаю, вопрос глупый

после цикла while символьный массив обнуляется? - C++
Собственно сабж. Подскажите, в чем проблема int RemoveChar(char *_str, int _strt, int _amt) { int i = 0; #ifdef CHECKING ...

Как очистить консоль после итерации цикла? - C++
Как очистить консоль в С++ после итерации цикла или перед функцией,чтобы допустим мы ввели массив,потом консоль очистилась и,к...

После выхода из цикла for значение зануляется и не возвращается - C++
Здравствуйте. Я учу с С++ недавно, может быть мой вопрос тупой, но нигде больше не нашёл такого.. Писал прогу для вывода степени 2ки, но...

Определить значение переменной после выполнения цикла while - C++
Определить значение переменной s после выполнения следующих операторов: s=0; i=0; while(i&lt;s) { i=i+1; s=s+1/i; }

Как очистить значение переменной после цикла? - C++
Задача такая. Создаем приложение TCP/IP. Клиент посылает слово серверу, сервер возвращает его назад в обратном порядке букв. НО! Момент...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-ДоМоВоЙ-
118 / 117 / 46
Регистрация: 19.01.2016
Сообщений: 434
Записей в блоге: 1
14.03.2016, 23:56     Ошибка после первого цикла #2
Ismet, У меня все ок.
Ismet
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
14.03.2016, 23:59  [ТС]     Ошибка после первого цикла #3
что?
-ДоМоВоЙ-
118 / 117 / 46
Регистрация: 19.01.2016
Сообщений: 434
Записей в блоге: 1
15.03.2016, 00:00     Ошибка после первого цикла #4
Ismet,
Цитата Сообщение от Ismet Посмотреть сообщение
после одного цикла программа не видеть первую строку в цикле for.команда "Enter name of 2 person" не появляется.
Ваш код рабочий.
Ismet
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:02  [ТС]     Ошибка после первого цикла #5
странно у меня не работает
-ДоМоВоЙ-
118 / 117 / 46
Регистрация: 19.01.2016
Сообщений: 434
Записей в блоге: 1
15.03.2016, 00:03     Ошибка после первого цикла #6
Ismet, А что именно у вас происходит после первого цикла?
nonedark2008
889 / 628 / 126
Регистрация: 28.07.2012
Сообщений: 1,697
15.03.2016, 00:06     Ошибка после первого цикла #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ismet, gets, как и все стандартные функции считывания строки, читают поток ввода до появления символа перевода строки '\n'.
А такие конструкции "cin>>f[i].c" работают по другому, они считывают то что им положено (число, слово и т.п.), а что находится за ними не трогают. Т.е. если после ввода числа ты нажал Enter, т.е. вставил символ перевода строки '\n', то этот символ в потоке ввода после считывания числа останется. И когда твой цикл пойдет на вторую итерацию и выполнит gets(f[i].a);, то он сразу прочитает '\n' не дожидаясь ввода с твоей стороны.

Чтобы этого избежать, нужно в конце цикла выкинуть оставшийся символ '\n', для этого можно например выполнить:
C++
1
cin.ignore(numeric_limits<int>::max(), '\n');
Ismet
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:09  [ТС]     Ошибка после первого цикла #8
вот так.
не могу вводит 2 имя.программа пропускает его. (вторую команду gets)
Миниатюры
Ошибка после первого цикла  
-ДоМоВоЙ-
118 / 117 / 46
Регистрация: 19.01.2016
Сообщений: 434
Записей в блоге: 1
15.03.2016, 00:09     Ошибка после первого цикла #9
nonedark2008,
Ismet
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:13  [ТС]     Ошибка после первого цикла #10
можете код написать мне?а то я не понял
nonedark2008
889 / 628 / 126
Регистрация: 28.07.2012
Сообщений: 1,697
15.03.2016, 00:16     Ошибка после первого цикла #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Ismet Посмотреть сообщение
а то я не понял
Сочувствую.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <limits>
#include <stdio.h>
using namespace std;
typedef struct info {
    char a[20], b[20];
    int c, d;
}el;
int main() {
    el f[5];
    for (int i = 0; i < 5; i++) {
        cout << "Enter name of " << i + 1 << " person" << endl;
        gets(f[i].a);
        cout << "Enter lastname of " << i + 1 << " person" << endl;
        gets(f[i].b);
        cout << "Enter age of " << i + 1 << " person" << endl;
        cin >> f[i].c;
        cout << "Enter number of " << i + 1 << " person" << endl;
        cin >> f[i].d;
        cin.ignore(numeric_limits<int>::max(), '\n');
    }
    return 0;
}
Ismet
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:19  [ТС]     Ошибка после первого цикла #12
спасибо вам большое!!!все работает!!!урааа
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3690 / 1965 / 514
Регистрация: 18.10.2014
Сообщений: 3,543
15.03.2016, 00:20     Ошибка после первого цикла #13
Цитата Сообщение от Ismet Посмотреть сообщение
можете код написать мне?а то я не понял
Зачем вы смешиваете в одном и том же коде ввод через gets и ввод через cin? Почему бы вам не сделать все через cin? И проблема ваша с "первым циклом" тоже бы никогда не возникла.

(Не говоря уже о том, что ни в стандартной библиотеке С, ни в стандартной библиотеке С++ больше нет функции gets.)
Ismet
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:21  [ТС]     Ошибка после первого цикла #14
а через cin можно ?? я не знал
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3690 / 1965 / 514
Регистрация: 18.10.2014
Сообщений: 3,543
15.03.2016, 00:23     Ошибка после первого цикла #15
Цитата Сообщение от Ismet Посмотреть сообщение
а через cin можно ??
Разумеется

C++
1
2
3
4
5
...
cin >> f[i].a;
...
cin >> f[i].b;
...
В таком виде это так же криво и опасно, как и gets, но зато без gets.

В таком варианте вам не понадобится добавлять никакого cin.ignore.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2016, 00:24     Ошибка после первого цикла
Еще ссылки по теме:

Каково значение переменной после работы цикла - C++
Где то когда то читал, что значение переменной цикла после его окончания неопределено. Но использование такое вроде бы видел. Как...

Использование условного оператора после операторов цикла с условием - C++
Определить: а) является ли заданное число степенью числа 3. б) является ли заданное число степенью числа 5.

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

Использование условного оператора после операторов цикла с условием - C++
Дана последовательность целых чисел, оканчивающаяся числом -1. Количество чисел в последовательности не меньше двух. Определить, есть ли в...


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

Или воспользуйтесь поиском по форуму:
Ismet
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:24  [ТС]     Ошибка после первого цикла #16
спасибо
Yandex
Объявления
15.03.2016, 00:24     Ошибка после первого цикла
Ответ Создать тему
Опции темы

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