2013-05-04 81 views
-1

这里是无法读取第一个字符串

#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和w的值,但对于第一种情况,它拒绝读取m。

样品:

INPUT 
1 
hello 


m is 
w is hello 


2 

hello 
m 
w hello 

stack 
overflow 

m stack 
w overflow 

回答

5
cin>>te; 

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

cin.ignore(); 

,或者忽略所有字符,直到并包括下一个\n字符(如果有人输入1foo或某事),你可以这样做:

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

谢谢你的解决方案。它解决了我的问题。我想问的问题是,如果cin在流中造成了剩余字符,那么为什么它不会一直发生在我身上。为什么只发生在这个特定的实例? – Piyush 2013-05-07 12:35:34

+0

@Piyush它本身不是'cin'。这是你使用'cin'的方式。当使用'>>'提取数据时,其通常称为*格式化输入函数*。它首先提取并放弃空格,然后读出适当的格式化文本(“int”的数字,“std :: string”的一个字),然后停止。如果你使用'>>'一次,是的,换行符会被留下。如果您再次使用它,换行符会在开始时被丢弃。将格式化输入与*无格式输入功能*混合时会出现问题。这些不*,默认情况下,在开始时提取空白。 'getline'就是一个例子。 – 2013-05-07 12:41:56

+0

非常感谢你:) – Piyush 2013-05-07 12:43:49

相关问题