无法读取第一个字符串
问题描述:
这里是无法读取第一个字符串
#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
答
cin>>te;
这会从输入流中提取1
,然后在停止但不提取\n
。你需要ignore()
那个字符,否则你要做的下一行提取只读一个空行。
cin.ignore();
,或者忽略所有字符,直到并包括下一个\n
字符(如果有人输入1foo
或某事),你可以这样做:
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
谢谢你的解决方案。它解决了我的问题。我想问的问题是,如果cin在流中造成了剩余字符,那么为什么它不会一直发生在我身上。为什么只发生在这个特定的实例? – Piyush 2013-05-07 12:35:34
@Piyush它本身不是'cin'。这是你使用'cin'的方式。当使用'>>'提取数据时,其通常称为*格式化输入函数*。它首先提取并放弃空格,然后读出适当的格式化文本(“int”的数字,“std :: string”的一个字),然后停止。如果你使用'>>'一次,是的,换行符会被留下。如果您再次使用它,换行符会在开始时被丢弃。将格式化输入与*无格式输入功能*混合时会出现问题。这些不*,默认情况下,在开始时提取空白。 'getline'就是一个例子。 – 2013-05-07 12:41:56
非常感谢你:) – Piyush 2013-05-07 12:43:49