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

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

Войти
Регистрация
Восстановить пароль
 
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
#1

Структуры - C++

17.01.2010, 10:20. Просмотров 592. Ответов 14
Метки нет (Все метки)

Привет всем. Я описал структуру и заполняю массив из 3 элементов с типом этой структуры вводом с клавиатуры. После первой итерации цикла ввода больше ничего не вводится (( помогите разобраться пожалуйста, заранее благодарен.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <string.h>
#include <iostream.h>
#include <windows.h>
 
int main (){
 
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
 
   const int l_fio = 20;
 
   struct student{
      char fio[l_fio+1];
      int  group;
      int  value[5];
   };
 
   student stud[3];
 
   for(int i=0; i<3; i++){
 
      cout << "\nВведите ФИО: ";
      cin.get(stud[i].fio, l_fio);
      stud[i].fio[l_fio+1] = '\0';
      cout << "\nВведите группу: ";
      cin >> stud[i].group;
      cout << "\nВведите оценки(5шт.): ";
      for(int j=0; j<5; j++) cin >> stud[i].value[j];
 
   }
   cout << "\nКонтрольный вывод: \n";
   for(int i=0; i<3; i++){
 
      cout << "\nФИО: " << stud[i].fio;
      cout << "\nГруппа: " << stud[i].group;
      cout << "\nОценки(5шт.): ";
      for(int j=0; j<5; j++) cout << stud[i].value[j] << " ";
      cout << "\n\n";
   }
 
   return 0;
 
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2010, 10:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Структуры (C++):

Помещение структуры в вектор, удаление структуры, изменение элементов структуры - C++
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё. - C++
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для...

Функция внутри структуры использует указатель, как поле этой структуры - C++
Коротко, есть класс A, описан в файле A_class.h ну и реализованы функции в A_class.cpp, есть файл GlobalItems.h, где хранятся глобальные...

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры) - C++
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом создаю экземпляр, Subject G; ...

Вывод структуры, строка как элемент структуры - C++
Описать структуру с именем TRAIN, содержащую следующие поля: □ название пункта назначения; □ номер поезда; □ время отправления. ...

Исследование структуры FILE или: что вообще можно выудить из этой структуры, указатель на которую мы получаем при открытии файла? - C++
Ничего нельзя. Итак, новичкам напомню, что после выполнения кода FILE* f= fopen (&quot;file.txt&quot;, &quot;w&quot;); в переменной f содержится...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.01.2010, 10:23 #2
C++
1
cin.getline(stud[i].fio, l_fio);
0
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
17.01.2010, 10:27  [ТС] #3
теперь ввод продолжается, но ФИО 2-ой и 3-ий раз я не могу ввести, сразу на группу переходит
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.01.2010, 11:13 #4
C++
1
2
        cin >> stud[i].value[j];
    cin.get();
вообще там можно как-то чистить
cin.clear() или cin.ignore() чтоли

Добавлено через 16 минут
cin.clear() - это другое, а cin.ignore() - то, что надо

C++
1
2
        cin >> stud[i].value[j];
    cin.ignore();
1
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
17.01.2010, 11:17  [ТС] #5
да работает в принципе и с cin.get(),СПАСИБО, только я так и не понял саму причину ошибки (

Добавлено через 1 минуту
и что игнорирует cin.ignore() ?
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.01.2010, 11:21 #6
когда вводишь последнюю оценку, перевод строки после неё идёт в следующий запрос fio
cin.ignore() видимо пропускает всё, что до его вызова в потоке (не думаю, что он пропускает только пробельные)
0
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
17.01.2010, 11:29  [ТС] #7
СПАСИБО ЗА ПОМОЩЬ!)
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.01.2010, 11:30 #8
в курсе, что, благодаря getline, stud[i].fio[l_fio+1] = '\0'; можно убрать
и вообще
C++
1
    cin.getline(stud[i].fio, sizeof stud[i].fio);
0
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
17.01.2010, 11:40 #9
cin.clear() - сбрасывает флаги состояния потока (eof, fail, bad,)
cin.ignore() - удаляет символ из потока
cin.ignore(n, 'delim') - удаляет n символов из потока или до символа 'delim' (если он встретится раньше)
cin.ignore(n) - удалаяет n сиволов из потока ('delim' по умолчанию равен eof)

Добавлено через 2 минуты
Можно применить такую конструкцию для очищения потока
C++
1
2
3
4
5
while (!cin.eof())
{
   cin.ignore();
}
cin.clear();
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.01.2010, 05:21 #10
C++
1
while (!cin.eof())
может зависнуть цикл (при ошибке чтения стандартного потока)
0
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
18.01.2010, 09:46 #11
Вместо eof можно использовать флаг fail.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.01.2010, 11:31 #12
что-нибудь типа такого
C++
1
while (!(cin.eof() | cin.fail()))
C++
1
while (!cin.eof() && !cin.fail())
0
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
18.01.2010, 12:29 #13
Эксперименты показали, что пример оказался неудачным, т.к. cin.ignore() не изменяет флаги состояния потока((, также как и оператор взять из потока >>. Для функций getline и get можно так попытаться очистить поток
C++
1
2
3
4
5
if (cin.fail())
{
   cin.clear();
   while (cin.get() != '\n');
}
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.01.2010, 13:19 #14
C++
1
while (cin.get() != '\n');
этот может зависнуть, если не сможет прочитать
C++
1
while (cin.get(c) && c != '\n');
Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
#include <iostream>
 
using namespace std;
 
int main(void)
{
    char c;
    
    while (cin.get(c) && c != '\n')
        ;
        
    cout << "ok" << endl;
    
    return 0;
}
Код
[guest@station tmp]$ ./t2
lkajsdflkj.
ok
[guest@station tmp]$ echo abcd | ./t2
ok
[guest@station tmp]$ echo -n abcd | ./t2
ok
[guest@station tmp]$
0
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
18.01.2010, 14:08 #15
Ну если так пессимистично смотреть, тогда так
C++
1
2
3
4
5
6
7
8
9
if (cin.fail())
{
   cin.clear();
   while (!cin.fail());
   {
      cin.get();
   }
   cin.clear();
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2010, 14:08
Привет! Вот еще темы с ответами:

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

Структуры. Работа с файлами, содержащими структуры - C++
2) Дана совокупность сведений, каждое из которых состоит из следующих рекви-зитов: фамилия и инициалы автора – 25 знаков; название книги –...

Оператор if и структуры. Возвращение структуры из функции - C++
Здравствуйте, имеется такая вот функция. void InputStructEmployee (int StructSize) { StructEmployee UsrStruct; string...

Понятие структуры данных. Элементарные структуры данных. Простые структуры данных - C++
Понятие структуры данных. Элементарные структуры данных. Простые структуры данных: методы реализации, особенности в различных языках...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.01.2010, 14:08
Ответ Создать тему
Опции темы

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