Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2010, 12:07   #1
sunplant
Пользователь
 
Регистрация: 07.04.2010
Сообщений: 13
По умолчанию Не прекращается ввод при вводе пустой строки

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

Код:
#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;
                        }
sunplant вне форума Ответить с цитированием
Старый 10.06.2010, 12:11   #2
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

нельзя так строки сравнивать :
strcmp использовать для сравнения char* строк нужно
Или std::string используйте.
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 10.06.2010, 12:45   #3
sunplant
Пользователь
 
Регистрация: 07.04.2010
Сообщений: 13
По умолчанию

Спасибо, сейчас попробую.
sunplant вне форума Ответить с цитированием
Старый 10.06.2010, 15:03   #4
sunplant
Пользователь
 
Регистрация: 07.04.2010
Сообщений: 13
По умолчанию

Попробовал вот так,

Цитата:
#include <iostream>
#include <cstring>
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[3];
int number = getinfo(ps, 3);
cout << number << endl;
return 0;
}

int getinfo(student pa[], int n)
{
int i;
for (i=0; i < n; i++)
{
cout << "Enter fullname #" << i + 1 << ": ";
cin >> pa[i].fullname;
if (strcmp(pa[i].fullname, " ") == 0)
break;
cout << "Enter hobby #" << i + 1 << ": ";
cin >> pa[i].hobby;
cout << "Enter ooplevel #" << i + 1 << ": ";
cin >> pa[i].ooplevel;
}
cout << "Out!" << endl;
return i;
}
но тоже не работает.
sunplant вне форума Ответить с цитированием
Старый 10.06.2010, 15:32   #5
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

А если сравнить с "" ?
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 10.06.2010, 15:36   #6
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

подробнее
Код:
if (strcmp(pa[i].fullname, " ") == 0)
break;
здесь сравнение с пробелом а не с пустым символом
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 10.06.2010, 15:37   #7
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

ну или
Код:
if( !*pa[i].fullname )
  break;
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 10.06.2010, 15:37   #8
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

в Windows пустая строка в консоли это CTRL+Z
И сравнивать тогда лучше так
Код:
if (strlen(pa[i].fullname) == 0)
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 10.06.2010, 19:24   #9
sunplant
Пользователь
 
Регистрация: 07.04.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от mrChester Посмотреть сообщение
подробнее
Код:
if (strcmp(pa[i].fullname, " ") == 0)
break;
здесь сравнение с пробелом а не с пустым символом
Насколько я помню, пробел обозначается одинарными кавычками ' '
sunplant вне форума Ответить с цитированием
Старый 10.06.2010, 19:28   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

sunplant, это символ пробела, а не строка с пробелом(strcmp просит строку).
Ozerich, вполне корректно написал.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставкка пустой строки в файл FroL25 Помощь студентам 3 01.06.2010 14:05
delphi, при щелчке по пустой форме, создается кнопка, при щелчке на кнопку, она становится цветная KaZaaM Помощь студентам 5 15.05.2010 00:48
Удаление пустой строки ggxxx Microsoft Office Excel 2 30.04.2010 16:10
TurboC - баг при вводе строки с клавиатуры FW-TOT Общие вопросы C/C++ 4 21.11.2008 01:39
запрет на ввод пустой записи ГОСЕАН БД в Delphi 10 08.03.2008 03:48