Считывание со стандартного потока ввода
Код:
while (cin.get(c)) {....}
Код:
#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;
}
#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;
}
Именно по этой причине 98% программ никогда не считывает текст непрерывным потоком. В конце концов, юзверь может ошибиться! Поэтому, ему предоставляют возможность записать свои данные, после чего предлагают нажать Enter. После этого считываются не отдельные символы, а вся строка целиком. И уже она, при известной длине (или в ожиданрии терминирующего 0 или ещё каких-либо разделителей) обрабатывается в программе и бесконечных циклов там не предполагается.