Чтение предложения до нажатия клавиши ENTER с использованием двумерного массива символов

Мне нужно прочитать предложение слово за словом, пока не будет нажата клавиша «ВВОД». Я использовал цикл do.. while для чтения слов, пока не нажата клавиша ENTER. Пожалуйста, предложите мне некоторые условия для проверки нажатия клавиши ВВОД (или) других способов чтения аналогичного ввода.

#include<iostream>
#include<string.h>
using namespace std;

int main(){

char a[100][20]={'\0'};
int i=0;

do{
cin>>a[i++];
} while( \\ Enter key is not pressed );

for(int j= 0 ; j < i ; j++)
cout<< a[j] << " ";
return 0;
}

4

Решение

while (cin.peek() != '\n') {
cin >> a[i++];
}
4

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

Заявление

cin>>a[i++];

блокирует в приглашении, пока ВОЙТИ клавиша нажата. Таким образом, решение состоит в том, чтобы прочитать одну строку одновременно (используя std::getline()) и разбирать слова из него в отдельном шаге.

Как ваш вопрос помечен , Вы можете сделать следующее:

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

int main() {
std::string sentence;
std::cout << "Enter a sentence please: "; std::cout.flush();

std::getline(std::cin,sentence);
std::istringstream iss(sentence);

std::vector<std::string> words;
std::string word;
while(iss >> word) {
words.push_back(word);
}

for(std::vector<std::string>::const_iterator it = words.begin();
it != words.end();
++it) {
std::cout << *it << ' ';
}
std::cout << std::endl; return 0;
}

Смотрите полностью рабочий демонстрация Пожалуйста.


В качестве улучшения текущий стандарт обеспечивает еще более простой синтаксис для for() цикл:

    for(auto word : words) {
std::cout << word << ' ';
}
3

Как насчет использования этого в качестве вашего заявления в то время как

while( getchar() != '\n' );

Вам понадобится <stdio.h> заголовочный файл для этого.

Увидеть ссылка на идеон

1

Во-первых, я должен сказать, что решение πάντα ῥεῖ лучше.
Но это может быть очень много для вас, если вы новичок.
Кроме того, я думаю, что вы хотите в 2-D массиве, а не векторах.

#include<iostream>
#include<string.h>
using namespace std;

int main(){

/*
All of this is simplified.
For example there are no check if user entered word larger than 100 chars.
And that's not all, but because of simplicity, and easy of understanding....
*/

char a[100][20]={'\0'};
char c;
char buffer[2000];

int i=0, j, k = 0;

/*
Read in advance all to way to ENTER, because on ENTER key all data is flushed to our application.
Untill user hits ENTER other chars before it are buffered.
*/
cin.getline(buffer, 2000, '\n');

do {
c = buffer[k++]; //read one char from our local buffer
j = 0;

//while we don't hit word delimiter (space), we fill current word at possition i
// and of cource while we don't reach end of sentence.
while(c != ' ' && c != '\0'){
a[i][j++] = c;   //place current char to matrix
c = buffer[k++]; //and get next one
}

i++;  //end of word, go to next one

//if previous 'while' stopped because we reached end of sentence, then stop.
if(c == '\0'){
break;
}}while(i < 20);for(j= 0 ; j < i ; j++)
cout<< a[j] << " ";

cout << endl;

return 0;
}
1

Ты можешь попробовать
cin.getline (буфер, 1000);

0
По вопросам рекламы [email protected]