无法读取第一个字符串

时间:2013-05-04 21:01:18

标签: c++ string cin

这是代码

#include<iostream>
#include<cstring>
#define limit 25
using namespace std;

int main()
{
    int te; //Number of test cases
    cin>>te;


    while(te)
    {

    char m[limit];
    char w[limit];

    cin.getline(m,limit); // This line is not getting executed for some reason
    cin.getline(w,limit);

    cout<<"m "<<m<<" "<<endl<<"w "<<w<<endl;

    te--;

    }

}

因为上帝知道是什么原因,机器拒绝为第一个测试用例读取m。在其他情况下,它会读取并打印m和w的值,但对于第一种情况,它拒绝读取m。

样品:

INPUT
1
hello


m is 
w is hello


2

hello
m 
w  hello

stack
overflow

m  stack
w overflow

1 个答案:

答案 0 :(得分:5)

cin>>te;

这将从输入流中提取1,然后停止但不提取\n。您需要ignore()该字符,否则您执行的下一行提取只会读取一个空行。

cin.ignore();

或者忽略所有字符,包括下一个\n字符(如果有人输入1foo或其他内容),您可以执行以下操作:

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');