getline()的奇怪行为

时间:2013-12-24 18:43:35

标签: c++ getline

#include<stdio.h>
#include<iostream>
#include<cmath>

using namespace std;
void test();

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
        test();
    return 0;
}

void test()
{
    string AB;
    getline(cin,AB);
    cout<<AB<<endl;
    printf("ada\n");
}

这段代码表现得很糟糕。当t = 1时,getline()语句根本不执行并直接进入printf(“ada \ n”);声明。当t = 2时,首先打印'ada'一次,然后输入一次。如果我在main()函数本身编写test()函数,则不会发生此问题。伙计们,请执行它并告诉我解决方案!我应该在发生同样错误的不同问题中使用getline()!

1 个答案:

答案 0 :(得分:1)

主要的scanf()通话仅消耗该号码。它会在输入数字等待后留下任何换行符。

将C样式输入与C ++样式输入混合也不是一个好主意。你最好全部使用C ++风格,也可以在整个过程中使用getline()

例如:

int main()
{
    string line;
    int t;
    getline( cin, line );
    sscanf( line.c_str(), "%d", &t );

    // ...
}

此代码也不进行任何错误检查。为了使它真正具有防弹性,你应该加上它。