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

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

Войти
Регистрация
Восстановить пароль
 
Rumit
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 6
#1

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

05.04.2012, 15:38. Просмотров 753. Ответов 9
Метки нет (Все метки)

Здравствуйте, читаю книгу Прата С. (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, жирным я выделил входящую информацию. Помогите пожалуйста?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2012, 15:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Два вопроса от новичка (C++):

Два вопроса - C++
1)Мне надо запустить программу, нажимаю run и вместо того чтобы выдать мне расчеты экран мигает и и ничего не происходит. Мне говорили,...

Два вопроса - C++
1) Создать тип перечисления (перечень) MyType, который состоит из констант А=1,В=2,С=5 2)За декларируйте класc Student, которое будет...

Два вопроса по циклу for - C++
1. Нужно два условия и два модификатора в цикле for. Правильно ли я делаю? for (int j=0, k=0; j&lt;n &amp;&amp; k&lt;m; j++, k++) { //Работа цикла ...

Два вопроса: структура и файл - C++
1. Записать в файл f1 строку, затем в файл f2 записать символы, которые не повторяются в f1 (например: dsddsrt получаем в f2: rt). ...

Два вопроса по простой программе - C++
Вообщем начал изучать С++ (и из этого следует что я ничего не понимаю в программировании) В интернете скачал учебник &quot;С++ для чайников&quot; ...

два мелких вопроса на счет переменных - C++
у меня возник такой вопрос: скажем в функции main у меня есть переменная х, а с помощью return я освобождаю место,занятое х-ом. А что...

9
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.04.2012, 15:54 #2
Цитата Сообщение от Rumit Посмотреть сообщение
Почему эта программа после выполнения закрывается, если ввести строку где посередине будет '#'?
C++
1
while (ch != '#')
срабатывает условие
ctrl+f5 run without debuggin в Visual Studio
0
Rumit
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 6
05.04.2012, 16:02  [ТС] #3
Попробовал Ctrl+F5, получается с остановкой...а в чем суть? почему при F5 не сработали команды cin.get();? - они же все равно должны ждать нажатия Enter'a?
0
zss
Модератор
Эксперт С++
6576 / 6138 / 2021
Регистрация: 18.12.2011
Сообщений: 15,993
Завершенные тесты: 1
05.04.2012, 16:02 #4
clear() - не удаляет оставшиеся символы, а только сбрасывает флаги ошибок.
Наверное лучше всю строку зачитать целиком методом getline
C++
1
2
char str[80];
cin.getline(str,79);
а потом уж в строке найти символ #
0
Rumit
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 6
05.04.2012, 16:04  [ТС] #5
Я то понимаю что есть другие способы, просто я делаю методами как в книге.
0
LVV
94 / 91 / 21
Регистрация: 15.02.2010
Сообщений: 369
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;
}
1
Van111
209 / 188 / 4
Регистрация: 03.08.2011
Сообщений: 2,598
Записей в блоге: 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;
}
0
Rumit
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 6
05.04.2012, 16:19  [ТС] #8
LLV спасибо за правильный ответ)..Во втором вопросе была суть что я не могу сделать программу в которой вводишь A он ее меняет на B...или вводишь B он ее меняет на С? Без операций сравнивания..так как я ее еще в тот момент не прошел
0
LVV
94 / 91 / 21
Регистрация: 15.02.2010
Сообщений: 369
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;
}
3
Rumit
0 / 0 / 0
Регистрация: 05.04.2012
Сообщений: 6
05.04.2012, 16:47  [ТС] #10
Спасибо LLV)
0
05.04.2012, 16:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 16:47
Привет! Вот еще темы с ответами:

два вопроса по С++,вопрос про заг.файла и поток cin - C++
1.У меня есть заголовoчный файл,созданный в проекте А,в проекте В он нужен,как его туда добавить?Надо самим файл из папку в папку...

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

2 вопроса - C++
Всем привет! У меня 2 глупых вопроса 1. Допустим, такой код int value() const { return m_nValue; } В чём смысл const?

4 вопроса - C++
Здравствуйте, ответьте пожалуйста кто знает на 4 вопроса пожалуйста: 1)что означает в паскале with d do begin ----- и как...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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