1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
1

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

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

Author24 — интернет-сервис помощи студентам
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" не появляется.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2016, 23:25
Ответы с готовыми решениями:

После первого цикла значения переменных в остальных не меняются и берутся больше допустимого
Помогите понять что не так. После первого цикла значения переменных в остальных не меняются и...

Холодильник Samsung SR-44RMB - повторно не включается после первого цикла (холод. камера +16, мороз -22)
Холодильник Samsung SR-44RMB NoFrost на блоке управения (не таймер) - повторно не включается после...

Ошибка после выполнения цикла
Ошибка вылазиет тогда, когда программа переименует последний файл. Весь код: unit Unit1; ...

Что это за ошибка после первого writeln
uses crt, Graph var graphdriver, graphmode: integer; graphpath:string; ...

15
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
14.03.2016, 23:56 2
Ismet, У меня все ок.
0
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
14.03.2016, 23:59  [ТС] 3
что?
0
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
15.03.2016, 00:00 4
Ismet,
Цитата Сообщение от Ismet Посмотреть сообщение
после одного цикла программа не видеть первую строку в цикле for.команда "Enter name of 2 person" не появляется.
Ваш код рабочий.
1
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:02  [ТС] 5
странно у меня не работает
0
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
15.03.2016, 00:03 6
Ismet, А что именно у вас происходит после первого цикла?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
15.03.2016, 00:06 7
Лучший ответ Сообщение было отмечено Ismet как решение

Решение

Ismet, gets, как и все стандартные функции считывания строки, читают поток ввода до появления символа перевода строки '\n'.
А такие конструкции "cin>>f[i].c" работают по другому, они считывают то что им положено (число, слово и т.п.), а что находится за ними не трогают. Т.е. если после ввода числа ты нажал Enter, т.е. вставил символ перевода строки '\n', то этот символ в потоке ввода после считывания числа останется. И когда твой цикл пойдет на вторую итерацию и выполнит gets(f[i].a);, то он сразу прочитает '\n' не дожидаясь ввода с твоей стороны.

Чтобы этого избежать, нужно в конце цикла выкинуть оставшийся символ '\n', для этого можно например выполнить:
C++
1
cin.ignore(numeric_limits<int>::max(), '\n');
1
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:09  [ТС] 8
вот так.
не могу вводит 2 имя.программа пропускает его. (вторую команду gets)
Миниатюры
Ошибка после первого цикла  
0
165 / 164 / 124
Регистрация: 19.01.2016
Сообщений: 594
Записей в блоге: 1
15.03.2016, 00:09 9
nonedark2008,
0
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:13  [ТС] 10
можете код написать мне?а то я не понял
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
15.03.2016, 00:16 11
Лучший ответ Сообщение было отмечено Ismet как решение

Решение

Цитата Сообщение от 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;
}
1
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:19  [ТС] 12
спасибо вам большое!!!все работает!!!урааа
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
15.03.2016, 00:20 13
Цитата Сообщение от Ismet Посмотреть сообщение
можете код написать мне?а то я не понял
Зачем вы смешиваете в одном и том же коде ввод через gets и ввод через cin? Почему бы вам не сделать все через cin? И проблема ваша с "первым циклом" тоже бы никогда не возникла.

(Не говоря уже о том, что ни в стандартной библиотеке С, ни в стандартной библиотеке С++ больше нет функции gets.)
1
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:21  [ТС] 14
а через cin можно ?? я не знал
0
Вездепух
Эксперт CЭксперт С++
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
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.
1
1 / 1 / 0
Регистрация: 14.03.2016
Сообщений: 45
15.03.2016, 00:24  [ТС] 16
спасибо
0
15.03.2016, 00:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2016, 00:24
Помогаю со студенческими работами здесь

Установка Debian. Ошибка после первого запуска
Установил debian-8.1.0-amd64-netinst на свой ноут Fujitsu Lifebook AH530. Установка прошла без...

Где ошибка из-за которой после выполнения первого if остальные не выполняются
&lt;script&gt; function kvcorsolve_qe(){ var kvcor1 = document.getElementById(&quot;kvcor_c1&quot;).value; ...

Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла
при запуске в цикле while в строке x:=x div 10; выдает ошибку &quot;Нельзя изменять значение переменной...

Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла
при запуске в строке If i=k Then i:=i+1; выдает ошибку &quot;Нельзя изменять значение переменной цикла...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru