прервите оператор в C ++, нажав Enter

#include <iostream>
using namespace std;
int main()
{
int n,t=0,k=0;
cin>>n;
char data[n][100];
int num[n];
for(int i=0;i<n;i++)
{
while(1)
{
cin>>data[i][t];
cout<<data[i][t]<<endl;
if(data[i][t]=='\n') break;
k++;
if(k%2==1) t++;
}
cout<<i;
num[i]=(t-2)/2;
k=0;
t=0;
}

for(int i=0;i<n;i++)
{
while(1)
{
cout<<data[i][t];
if(t==num[i]) break;
t++;
}
t=0;
}
}

вот код, который я написал на c ++, который дает четные символы из начальной половины каждого слова, данного пользователем, но при вводе после нажатия клавиши ввод цикл должен прерываться, но цикл не прерывается

while(1)
{
cin>>data[i][t];
cout<<data[i][t]<<endl;
if(data[i][t]=='\n') break;
k++;
if(k%2==1) t++;
}

5

Решение

По умолчанию форматированный ввод с использованием операторов ввода >> пропустить пробел, и символ новой строки — это пробел. Так что происходит, что >> Оператор просто ожидает ввода некоторого не пробела.

Чтобы сказать, что ввод не пропустить пробел, вы должны использовать std::noskipws манипулятор:

cin>>noskipws>>data[i][t];
9

Другие решения

Есть несколько способов реализовать в C ++ то, что пытается сделать OP. Я бы начал избегать массивов переменной длины, которых нет в стандарте и использующих std::stringс и std::vectorвместо.

Одним из вариантов является чтение всей строки из ввода с помощью std::getline и затем обработайте полученную строку, чтобы сохранить только первую половину четных символов:

#include <iostream>
#include <string>
#include <vector>

int main() {
using std::cin;
using std::cout;
using std::string;

cout << "How many lines?\n";
int n;
cin >> n;std::vector<string> half_words;
string line;
while ( n > 0  &&  std::getline(cin, line) ) {
if ( line.empty() )     // skip empty lines and trailing newlines
continue;
string word;
auto length = line.length() / 2;
for ( string::size_type i = 1; i < length; i += 2 ) {
word += line[i];
}
half_words.push_back(word);
--n;
}

cout << "\nShrinked words:\n\n";
for ( const auto &s : half_words ) {
cout << s << '\n';
}

return 0;
}

Другой способ, как это сделал Йоахим Пилеборг в своем ответе, отключить пропуск начальных пробелов в форматированных функциях ввода с помощью std::noskipws манипулировать, а затем читать символ за раз:

// ...
// disables skipping of whitespace and then consume the trailing newline
char odd, even;
cin >> std::noskipws >> odd;

std::vector<string> half_words;
while ( n > 0 ) {
string word;
// read every character in a row till a newline, but store in a string
// only the even ones
while (    cin >> odd  &&  odd != '\n'
&& cin >> even && even != '\n' ) {
word += even;
}
// add the shrinked line to the vector of strings
auto half = word.length() / 2;
half_words.emplace_back(word.begin(), word.begin() + half);
--n;
}
//  ...
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector