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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ напишите программу: Равнобедренный треугольник, равнобедренный треугольник со скошенными углами, текст, текст в треугольнике. http://www.cyberforum.ru/cpp-beginners/thread678837.html
напишите программу: Равнобедренный треугольник, равнобедренный треугольник со скошенными углами, текст, текст в треугольнике. пожалуйста очень надо
C++ Книги по С++ Очередной топик по книжкам, да. Доброго времени суток, форумчане! Имею опыт работы с PHP и C# В планах продолжать заниматься геймдевом. Перехожу на С++ Предложите книжку пожалуйста, чтобы и не с нуля начинать, но и не сразу сложную. В ближайших планах - работа с сетью (сервер-клиент), потому необходима литература по сокетам (например). Что почитать? http://www.cyberforum.ru/cpp-beginners/thread678835.html
Обмен положительных элементов в массиве C++
Все положительные числа в массиве Z переставить в обратном порядке, не изменяя положения остальных чисел. Помогите написать обработку. Вот мои заготовки но оно циклится, и не хочет корректно работать( void vector::obrabotka2()//menyaem polog el v massive z v obratnom poryadke { int i,j,k,g,l; l=dk; k=0; for (i=0;i<dm;i=i+2) {if (z>0)
Найти, какое минимальное число поворотов на один зубчик требуется сделать, чтобы шестеренки вернулись в исходное состояние C++
Даны две сцепленные шестеренки. У одной шестеренки N зубцов, у другой – K. Требуется найти, какое минимальное число поворотов на один зубчик требуется сделать, чтобы шестеренки вернулись в исходное состояние. Формат ввода В единственной строке даны два натуральных числа N и K, каждое из которых не превосходящих 10 миллионов. Формат вывода Выведите искомое количество зубчиков....
C++ преобразование и построение матриц http://www.cyberforum.ru/cpp-beginners/thread678806.html
дана действительная квадратная матрица порядка n.найти наибольшее из значений элементов,расположенных в заштрихованной части матрицы
C++ Преобразовать строки в целые числа, просуммировать и вывести сумму 4 значений Напишите программу, которая вводит 4 строки, представляющие целые значения, преобразует строки в целые числа, суммирует и выводит сумму 4 значений. подробнее

Показать сообщение отдельно
dota
3 / 3 / 0
Регистрация: 20.09.2010
Сообщений: 100
23.10.2012, 21:33     Считывание из стандартного потока ввода
Доброго времени суток . Столкнулся вот с такой проблемой . Есть функция , которая считывает со стандартного потока ввода код программы на С++ и удаляет там все комментарии . Собственно , функция работает , но это не то , что я хочу . Я хочу записывать корректной код уже без комментариев в какую-то 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru