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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.72
sunplant
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 11
#1

Не прекращается ввод при вводе пустой строки - C++

10.06.2010, 11:56. Просмотров 3659. Ответов 13
Метки нет (Все метки)

Подскажите, пожалуйста, почему у меня не происходит прерывание цикла при вводе пустой строки вместо имени студента:

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
#include <iostream>
using namespace std;
const int SLEN = 30;
struct student {
        char fullname[SLEN];
        char hobby[SLEN];
        int ooplevel;
};
 
int getinfo(student pa[], int n);
 
int main()
{
        student ps[2];  
        int number = getinfo(ps, 2); 
        cout << number << endl;
        return 0;
}
 
int getinfo(student pa[], int n)
{
        int i;
        for (i=0; i < n; i++)
        {
                cout << "Enter fullname #" << i + 1 << ": ";               
                while (cin >> pa[i].fullname == " ")
                              break;                
                cout << "Enter hobby #" << i + 1 << ": ";
                cin >> pa[i].hobby;               
                cout << "Enter ooplevel #" << i + 1 << ": ";
                cin >> pa[i].ooplevel;
                }   
        cout << "Out!" << endl;
                return i;
                        }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2010, 11:56     Не прекращается ввод при вводе пустой строки
Посмотрите здесь:
Копирование строки. При вводе пробела программа пропускает последующий ввод данных C++
C++ Ввод пустой строки и ее запись в переменную
C++ Ввод и проверка при вводе чисел в диалогах
Как сделать так, что бы длинна строки сама менялась при вводе строки? C++
при некорректном вводе cin далее уже не принимает ввод, не понимаю почему? C++
Ввод чисел, при вводе нуля - вывод количества цифр, идущих по порядку C++
Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
10.06.2010, 12:04     Не прекращается ввод при вводе пустой строки #2
Для сравнения строк используется функция strcmp.
sunplant
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 11
10.06.2010, 12:24  [ТС]     Не прекращается ввод при вводе пустой строки #3
Это должно выглядеть вот так?

if (strcmp(pa[i].fullname, " ") == 0)
break;
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
10.06.2010, 12:25     Не прекращается ввод при вводе пустой строки #4
А надо чобы прекращался цикл? Попробуйте cin.getline( pa[i].fullname, SLEN);
Что вообще должно происходить при вводе пустой строки?
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
10.06.2010, 12:30     Не прекращается ввод при вводе пустой строки #5
sunplant, лучше используйте std::string там перегружен оператор == и строки можете сравнивать как s1 == s2 , где s1, s2 - объекты класса std::string.
sunplant
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 11
10.06.2010, 12:31  [ТС]     Не прекращается ввод при вводе пустой строки #6
Да. но условием выступает массив, а не строка, а ввод должен прекращаться либо после наполнения массива, либо при вводе пустой строки вместо имени студента.
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
10.06.2010, 12:36     Не прекращается ввод при вводе пустой строки #7
можно так
C++
1
2
3
cin.getline ( pa[i].fullname, SLEN);
if (strlen(pa[i].fullname)==0)
break;
sunplant
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 11
10.06.2010, 12:43  [ТС]     Не прекращается ввод при вводе пустой строки #8
Да, NNN777, все сработало, спасибо!
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
10.06.2010, 12:52     Не прекращается ввод при вводе пустой строки #9
Цитата Сообщение от sunplant Посмотреть сообщение
ввод должен прекращаться либо после наполнения массива, либо при вводе пустой строки вместо имени студента.
Сорри, но мой вариант не будет работать на переполнение массива ((( cin.getline наполнит массив на сколько это можно и успокоится, а остальные введенные символы останутся в входном потоке... Цикл не завершится...
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
10.06.2010, 13:00     Не прекращается ввод при вводе пустой строки #10
Цитата Сообщение от sunplant Посмотреть сообщение
а ввод должен прекращаться либо после наполнения массива, либо при вводе пустой строки вместо имени студента.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        for (i=0; i < n; i++)
        {
                cout << "Enter fullname #" << i + 1 << ": ";               
                              cin >> pa[i].fullname;
                              if (!strcmp(pa[i].fullname, " ")
                                 break;                            
                cout << "Enter hobby #" << i + 1 << ": ";
                cin >> pa[i].hobby;               
                cout << "Enter ooplevel #" << i + 1 << ": ";
                cin >> pa[i].ooplevel;
                }       
                cout << "Out!" << endl;
                return i;
                        }
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
10.06.2010, 13:06     Не прекращается ввод при вводе пустой строки #11
Если считать, что если размер строки 10, это 9 символов и 10-й символ конца строки, то
C++
1
2
3
 cin.getline ( pa[i].fullname, SLEN+1);         
if (strlen(pa[i].fullname)==0||pa[i].fullname[SLEN-1]!='\0')
    break;
Правда, не знаю, насколько это правильно
sunplant
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 11
10.06.2010, 14:44  [ТС]     Не прекращается ввод при вводе пустой строки #12
Уважаемый kazak. попробовал этот вариант, но он не работает.

Добавлено через 34 минуты
Уважаемый NNN777, может быть лучше вот так?

cin.getline(pa[i].fullname, SLEN+1);
if (strlen(pa[i].fullname)==0 || pa[i].fullname[SLEN] =='\0')
break;
NNN777
299 / 157 / 19
Регистрация: 27.02.2010
Сообщений: 317
10.06.2010, 15:00     Не прекращается ввод при вводе пустой строки #13
sunplant, можно и так просто у меня узначально ullname нульбайтами инициализировался, поэтому так не сработало бы, а если не инициализировать, работает)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.06.2010, 15:05     Не прекращается ввод при вводе пустой строки
Еще ссылки по теме:
Ошибка при вводе строки ! C++
при заполнении строк, начинается с пустой строки C++
Хэширование. Ошибка при вводе строки. C++
При вводе строки выводить только цифры C++
C++ Почему при инициализации строки, сначала создаётся пустой объект?

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

Или воспользуйтесь поиском по форуму:
sunplant
0 / 0 / 0
Регистрация: 07.04.2010
Сообщений: 11
10.06.2010, 15:05  [ТС]     Не прекращается ввод при вводе пустой строки #14
Понял!
Yandex
Объявления
10.06.2010, 15:05     Не прекращается ввод при вводе пустой строки
Ответ Создать тему
Опции темы

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