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

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

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

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;
                        }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 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);
Что вообще должно происходить при вводе пустой строки?
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
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
 Аватар для kazak
3029 / 2350 / 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++

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

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

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