2015-03-29 3 views
4

Мне нужно прочитать предложение слово за словом, пока не будет нажата клавиша «ENTER». Я использовал цикл do..while для чтения слов до нажатия клавиши ENTER. Пожалуйста, предложите мне некоторые условия для проверки клавиши ENTER (или) другими способами для чтения аналогичного ввода.Чтение предложения до тех пор, пока клавиша 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; 
} 
+1

ВВЕСТИ ключ уже был нажат, как только вы читали ваш 1-ый слово здесь: 'CIN >> а [я ++];'. –

ответ

1

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

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

Вам нужен файл <stdio.h> заголовка для этого.

ВИДЕТЬ ideone link

3

Заявления

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; 
} 

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


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

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

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

#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; 
} 
Смежные вопросы