使用 getline() 的 Wierd 行为

Wierd behaviour with getline()

本文关键字:Wierd 行为 getline 使用      更新时间:2023-10-16
#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("adan");
}

此代码的行为很糟糕。当 t=1 时,getline() 语句根本不执行,直接转到 printf("ada");陈述。当 T=2 时,首先打印一次"ada",然后输入一次。如果我在main()函数本身中编写test()函数,则不会出现此问题。伙计们,请执行它并告诉我解决方案!我应该在发生相同错误的不同问题中使用 getline()!

main

中的scanf()调用仅消耗号码。 它在输入中等待的数字之后留下任何换行符。

将 C 样式输入与C++样式输入混合也不是一个好主意。 你最好通篇使用C++风格,也许也使用getline()

例如:

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

此代码也不执行任何错误检查。 为了使它真正防弹,您应该添加它。