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

Два вопроса от новичка - C++

Восстановить пароль Регистрация
 
Rumit
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 6
05.04.2012, 15:38     Два вопроса от новичка #1
Здравствуйте, читаю книгу Прата С. (5 издание), помогите:
Почему эта программа после выполнения закрывается, если ввести строку где посередине будет '#'?
(Например: 12345#123, ответ выводит правильно) Вроде в конце стоят доп. cin.get(); почему они не срабатывают...уже ставил и cin.clear(); и пустой счетчик (while) в качестве ожидания.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cstring>
#include <string>
#include <ctime>
int main()
{
    using namespace std;
    int count = 0;
    char ch;
    cin.get(ch);
    while (ch != '#')
    {
        cout << ch << endl;
        count++;
        cin.get(ch);
    }
    cin.clear();
    cout << endl << count;
    cin.get();
    cin.get();
    return 0;
}
И там в конце главы есть упражнения по программированию, не могу решить одну, не должны использоваться ни циклы, не операции ветвления(if else) - Потому что они еще не пройдены...а в этой главе проходили объединения(union), перечисления(думаю через них все делается), структуры, строки, указатели, динамические массивы и переменные:

Напишите программу С++, которая запрашивает и отображает инф-ию, как показано в след. примере вывода:

What is your first name? Betty Sue
What is your last name? Yew
What letter grade do you deserve? B
What is your age? 22
Name: Yew, Betty Sue
Grade: C
Age: 22

Обратите внимание что программа должна принимать имена, состоящие из более чем одного слова. Также программа уменьшает значение grade на один шаг - то есть на одну букву выше. (A, B, C, D, F - пропуск Е не учитываеться.)
У меня не получается выполнить часть про grade, жирным я выделил входящую информацию. Помогите пожалуйста?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2012, 15:38     Два вопроса от новичка
Посмотрите здесь:

два мелких вопроса на счет переменных C++
C++ два вопроса по С++,вопрос про заг.файла и поток cin
C++ Два вопроса: структура и файл
C++ Два вопроса по циклу for
Два вопроса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.04.2012, 15:54     Два вопроса от новичка #2
Цитата Сообщение от Rumit Посмотреть сообщение
Почему эта программа после выполнения закрывается, если ввести строку где посередине будет '#'?
C++
1
while (ch != '#')
срабатывает условие
ctrl+f5 run without debuggin в Visual Studio
Rumit
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 6
05.04.2012, 16:02  [ТС]     Два вопроса от новичка #3
Попробовал Ctrl+F5, получается с остановкой...а в чем суть? почему при F5 не сработали команды cin.get();? - они же все равно должны ждать нажатия Enter'a?
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,196
Завершенные тесты: 1
05.04.2012, 16:02     Два вопроса от новичка #4
clear() - не удаляет оставшиеся символы, а только сбрасывает флаги ошибок.
Наверное лучше всю строку зачитать целиком методом getline
C++
1
2
char str[80];
cin.getline(str,79);
а потом уж в строке найти символ #
Rumit
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 6
05.04.2012, 16:04  [ТС]     Два вопроса от новичка #5
Я то понимаю что есть другие способы, просто я делаю методами как в книге.
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
05.04.2012, 16:08     Два вопроса от новичка #6
Цитата Сообщение от Rumit
Почему эта программа после выполнения закрывается, если ввести строку где посередине будет '#'?
(Например: 12345#123, ответ выводит правильно) Вроде в конце стоят доп. cin.get(); почему они не срабатывают...уже ставил и cin.clear(); и пустой счетчик (while) в качестве ожидания.
Всё работает правильно.
У Вас в конце стоит два cin.get(), вот и происходит считівание двух символов после знака # ('1' и '2') и консольное окно закрівается.
Я лично исользую системную паузу для остановки консольного окна system ("pause");
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
    using namespace std;
int main()
{
    int count = 0;
    char ch;
    cin.get(ch);
    while (ch != '#')
    {
        cout << ch << endl;
        count++;
        cin.get(ch);
    }
    system ("pause");
    return 0;
}
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
05.04.2012, 16:10     Два вопроса от новичка #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
union Info
{
char FirstName[30];
char LasttBame[30];
int age;
//...
};
int main(void)
{
Infi info;
cout <<"Last Name ? " <<endl 
cin >>info.LastName;
cout <<"First Name ? " <<endl 
cin >>info.FirstName;
//
return 0;
}
Rumit
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 6
05.04.2012, 16:19  [ТС]     Два вопроса от новичка #8
LLV спасибо за правильный ответ)..Во втором вопросе была суть что я не могу сделать программу в которой вводишь A он ее меняет на B...или вводишь B он ее меняет на С? Без операций сравнивания..так как я ее еще в тот момент не прошел
LVV
56 / 56 / 3
Регистрация: 15.02.2010
Сообщений: 239
05.04.2012, 16:38     Два вопроса от новичка #9
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 <string>
using namespace std;
int main()
{
    string fn, ln;
    char gr;
    int ag;
cout << "What is your first name? ";
getline (cin,fn);
cout << "What is your last name? ";
getline (cin,ln);
cout << "What letter grade do you deserve? ";
cin >> gr;
cout << "What is your age? ";
cin >> ag;
 
cout << "Name:" << ln << ", " << fn << endl
    << "Grade: " << char(gr+1) << endl // следующий символ имеет код на единицу больший
    << "Age: " << ag << endl;
    system ("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 16:47     Два вопроса от новичка
Еще ссылки по теме:

Два вопроса по простой программе C++
Два вопроса C++
ввести строку а с клавиатуры. вместо каждой точки поставить два знака вопроса. и подсчитать колличество слов в предложении C++

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

Или воспользуйтесь поиском по форуму:
Rumit
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 6
05.04.2012, 16:47  [ТС]     Два вопроса от новичка #10
Спасибо LLV)
Yandex
Объявления
05.04.2012, 16:47     Два вопроса от новичка
Ответ Создать тему
Опции темы

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