getline()についての実験getline()は、キャッシュ領域の改行文字を読み出して直接改行する


getline()はキャッシュ領域の改行文字を読み込んで直接改行するので、以前も気づかなかったのでしょうが、最近気づきました.
#include 
#include 
#include 
#include 
#include 
using namespace std;
//                           
int main()
{
    int T;
    string str;
    scanf("%d",&T);
    while(T--){
        getline(cin,str);//cin>>str;
        for(auto &i : str )
            if(!isdigit(i)) i=' ';
        stringstream line(str);
        unsigned x,cot=0;
        while(line>>x) {
            if(cot==0) printf("%d",x);
            else if(cot==1)printf(" %d ",x);
            else printf("%d ",x);
            cot++;
        }
        if(T) printf("
"); } return 0; }
例えば
本来は2組のデータを入力できるのに、1組しか入力できない
プログラムを簡略化する
#include 
#include 
using namespace std;

int main()
{
    string str1;
    int x;cin>>x;
    //while(x--){
        getline(cin,str1);
        cout<

そうです
ただしgetline()の前に操作が入力されていない場合
#include 
#include 
#include 
#include 
#include 
using namespace std;
 
int main()
{
    int T=2;
    string str;
    //scanf("%d",&T);printf("
"); while(T--){ getline(cin,str);//cin>>str; for(auto &i : str ) if(!isdigit(i)) i=' '; stringstream line(str); unsigned x,cot=0; while(line>>x) { if(cot==0) printf("%d",x); else if(cot==1)printf(" %d ",x); else printf("%d ",x); cot++; } //getchar(); if(T) printf("
"); } return 0; }

できる
そこで筆者は、getlineは前の改行文字(まだキャッシュ領域の改行)を読み取ることができると思います.
解決方法はgetchar();それを吸って改行する.
#include 
#include 
#include 
#include 
#include 
using namespace std;

int main()
{
    int T=2;
    string str;
    scanf("%d",&T);getchar();
    while(T--){
        getline(cin,str);//cin>>str;
        for(auto &i : str )
            if(!isdigit(i)) i=' ';
        stringstream line(str);
        unsigned x,cot=0;
        while(line>>x) {
            if(cot==0) printf("%d",x);
            else if(cot==1)printf(" %d ",x);
            else printf("%d ",x);
            cot++;
        }
    //getchar();
        if(T) printf("
"); } return 0; }

そして説明を検索しました.
C入力文は、ユーザがデータを入力してEnterキーを入力してから開始する.
ユーザーが入力したデータとEnterキーは入力バッファにあります.
入力文は、バッファから順番に数を取ります. 
次の入力文は、まずバッファに行って読み終わっていない数を探して、バッファが数があれば、
取りに来て、もしないならば、待って、ずっとユーザーがEnterキーに入るまで待って、更に数を取り始めます.
getchar()のため;1文字のみ、
例:
char x;
printf("Enter 1 please: ");
x=getchar();
putchar(x);
x=getchar();  //   Enter
printf("
"); printf("Enter 2 please: "); x=getchar(); putchar(x);

1を打つように言われましたが、1を打つだけでEnterキーがなく、入力文は実行されません.
あなたが1を打ったら、またEnterキーを打って、getchar();1を除去するだけで、残りのEnterキーは、バッファにあり、Enterの文を吸収しなければprintf(「Enter 2 please:」);背面のgetchar();入力を待たずにバッファからEnterを取り、プログラムは終了します.
From http://zhidao.baidu.com/link?url=4XRMlbBZ9SuWM1svFIUGLPN-MkuS02ipom17xArlM8FJIW1SDGcaJKnnhGJTlL7284CaAj2RiflYdYW2Y2j1E_
ありがとう