按Enter键,在c ++中使用break语句

时间:2016-06-13 19:45:32

标签: c++ break 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++;
}

2 个答案:

答案 0 :(得分:9)

默认情况下,使用“input”运算符>>格式化输入跳过空格,换行符是空白字符。所以发生的事情是>>运算符只是等待输入一些非空白输入。

要告诉输入不要跳过空格,你必须使用std::noskipws操纵器:

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

答案 1 :(得分:0)

有一些方法可以在C ++中实现OP尝试做的事情。我开始避免使用可变长度数组,这些数组不在标准中,而是使用std::stringstd::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;
}

另一个是,正如Joachim Pileborg在他的回答中所做的那样,禁止通过带有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;
}
//  ...