在c ++中输入 - cin.getline

时间:2012-05-09 03:32:16

标签: c++

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int T;
    char J[100], S[100];
    int count=0;
    cin >> T;

    while(T--)
    {
        cin.getline(J,100);

        cin.getline(S,100);
        puts(J);
        puts(S);

        for(int i=0; J[i]!='\0'; i++)
        {
            for(int j=0; S[j]!='\0'; j++)
            {
                count++;
                for(int k=j; S[k]!='\0'; k++)
                    S[k]=S[k+1];
                break;
            }
         }
         cout << count;
    }
    return 0;
}

我在J,S中输入输入字符串但是在程序执行期间它从控制台cin.getline跳过第二个输入 我拿了测试用例然后拿走了字符串J和S. 它成功了J但是没有得到S字符串?

3 个答案:

答案 0 :(得分:1)

你需要使用字符串,std :: string,并在

中调用getline
std::string s,j;
std::getline(std::cin,j);
std::getline(std::cin,s);

然后如果你想通过单个字符迭代字符串的内容

for(auto i = std::begin(s); i != std::end(s); ++i)
{
     std::cout << *i << std::endl;
}

使用迭代器,并使用它们来获取实际的字符值。尽可能远离c字符串。

答案 1 :(得分:1)

此代码:

int T;
// ...
cin>>T;

...从标准输入中读取int。要让它读取int,您需要按输入键,但此代码输入输入缓冲区。然后...

cin.getline(J,100);

这会尝试从输入缓冲区读取一个字符串,直到第一个换行符。它从输入缓冲区中删除该换行符,但不将其作为字符串的一部分包含在内。因此,如果你看起来不那么紧密,它似乎基本上什么也没做 - 也就是说,你最终得到一个空字符串。

您通常希望坚持使用面向字段的输入(例如您的cin >> T;或其他面向行的输入(getline)。然而,将两者混合起来可能有点棘手,尤其是<{1}}来自之后面向字段的输入。不要误解我的意思:可以工作 - 并且工作得非常好,但是你需要知道你在做什么,即便如此,它仍然会让你一次又一次地惊讶。

正如我的评论(以及@ johnathon的回答)中所述,您通常也希望使用getline来读取std::getline,而不是使用char数组来读取std::string。即使充其量,后者也很笨拙。

如果您打算在任何地方使用它,我自己的偏好(通常)是在整个过程中使用面向行的输入。

std::cin.getline

另外,我还避免使用std::string temp; std::getline(std::cin, temp); int T = lexical_cast<int>(temp); while (T--) { std::string j; std::getline(std::cin, j); // ... 作为C ++中普通变量的名称。它通常用作模板参数的名称;将它用于“普通”变量更容易导致混淆,特别是对于更频繁使用模板的更高级程序员。

答案 2 :(得分:0)

(1)在cin&gt;&gt; T和while(T--)之间使用getchar() 如

int T;
char J[100] , S[100];
int count=0;
cin>>T;
getchar();
while(T--){
cin.getline(J,100);
cin.getline(S,100);

(2)。 您还可以通过以下方式解决问题::

char  T[10];
char J[100] , S[100];
int count=0;
getline(T,10);

while((atoi(T))--){

cin.getline(J,100);

cin.getline(S,100);

使用其中任何一个,它将解决您的问题。