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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
dota
3 / 3 / 0
Регистрация: 20.09.2010
Сообщений: 100
#1

Считывание из стандартного потока ввода - C++

23.10.2012, 21:33. Просмотров 1735. Ответов 1
Метки нет (Все метки)

Доброго времени суток . Столкнулся вот с такой проблемой . Есть функция , которая считывает со стандартного потока ввода код программы на С++ и удаляет там все комментарии . Собственно , функция работает , но это не то , что я хочу . Я хочу записывать корректной код уже без комментариев в какую-то string - строку , а затем вывести ее на экран , но проблема вот в чем : в функции использую цикл
C++
1
while(cin.get(c)) { .... }
, который фактически не дает завершить функцию , ибо считывает текст вечно . Можно , конечно , по ходу дела правильные символы сразу выводить на экран , но тогда при вставке текста в консоль происходит дублирование строк (под каждой строкой ее вариант без комментариев) , что не очень красиво смотрится . Возможно , вопрос дурацкий , но можно ли как-то ограничить считывание ?
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <string>
 
using std::cin;
using std::cout;
using std::string;
 
void deleteComments() {
    //string buffer = "";
    bool slash = false;
    char c, q;
    while (cin.get(c)) {
        if (c == '/') {
            if (slash) {
                slash = false;
                while (cin.get(c) && c != '\n');
                cout << '\n';
                //buffer += '\n';
            } else {
                slash = true;
            }
        } else if (c == '"' || c == '\'') {
            slash = false;
            cout << (q = c);
            //buffer += (q = c);
            while (cin.get(c)) {
                cout << c;
                //buffer += c;
                if (c == q) {
                    break;
                }
                if (c == '\\') {
                    cout << cin.get();
                    //buffer += cin.get();
                }
            }
        } else {
            if (slash) {
                if (c == '*') {
                    slash = false;
                    while (cin.get(c) && (!slash || c != '/')) {
                        slash = (c == '*');
                    }
                } else {
                    cout << '/' << c;;
                    //buffer += '/';
                    //buffer += c;
                }
            } else {
                cout << c;
                //buffer += c;
            }
            slash = false;
        }
    }
    //cout << "\nSource code without comments :\n" << buffer << endl;       
}
 
int main() {
    deleteComments();
    //system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2012, 21:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание из стандартного потока ввода (C++):

Как правильно распознать команды со стандартного потока ввода - C++
Разработайте программу, использующую разработанный Вами класс , которая обрабатывает команды пользователя, вводимые им со стандартного...

Считывание с потока ввода - C++
На стандартном потоке ввода задаётся последовательность целых чисел. Каждое число последовательности не меньше -20000000 и не больше...

Работа стандартного входного потока - C++
Здравствуйте. Допустим есть код: int number1, number2; std::cin &gt;&gt; number1 &gt;&gt; number2; Мы вводим, например, 1 2 и...

Считать со стандартного входного потока заданное слово и набор предложений - C++
Написать программу, которая считывает со стандартного входного потока заданное слово и набор предложений, разделителями которых являются...

Напишите программу, читающую строки со стандартного устройства ввода и суммирующую их в одну большую строку - C++
1. Напишите программу, читающую строки со стандартного устройства ввода и суммирующую их в одну большую строку. Отобразите полученную...

считывание потока чисел - C++
здраствуйте:) такая вот задачка http://acm.timus.ru/problem.aspx?space=1&amp;num=1001 а вот мой код #include&lt;iostream&gt; #include&lt;vector&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2012, 03:05 #2
Цитата Сообщение от dota Посмотреть сообщение
но можно ли как-то ограничить считывание ?
Если правильно понял: Ctrl + Z
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2012, 03:05
Привет! Вот еще темы с ответами:

считывание строк из потока файлов - C++
люди плз помогите разобраться. в конце компиляции выдает сообщение &quot;error C2228: left of '.close' must have class/struct/union&quot;....

Считывание до конца входного потока - C++
Что значит считывание данных до конца входного потока? Знаю, что на C++ реализуется так. А что является концом входного потока? И как это...

Считывание до конца потока в числовой массив - C++
Здравствуйте. Проблема с Как реализовать считывание до конца потока из файла вместе со scanf() или != EOF. В поиске нашёл реализацию...

Считывание строки из потока, не удаляя символ-ограничитель - C++
Есть ли какая-либо стандартная функция? P.S. Символ-ограничитель задается самостоятельно


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

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

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