getline()についての実験getline()は、キャッシュ領域の改行文字を読み出して直接改行する
3560 ワード
getline()はキャッシュ領域の改行文字を読み込んで直接改行するので、以前も気づかなかったのでしょうが、最近気づきました.
本来は2組のデータを入力できるのに、1組しか入力できない
プログラムを簡略化する
そうです
ただしgetline()の前に操作が入力されていない場合
できる
そこで筆者は、getlineは前の改行文字(まだキャッシュ領域の改行)を読み取ることができると思います.
解決方法はgetchar();それを吸って改行する.
そして説明を検索しました.
C入力文は、ユーザがデータを入力してEnterキーを入力してから開始する.
ユーザーが入力したデータとEnterキーは入力バッファにあります.
入力文は、バッファから順番に数を取ります.
次の入力文は、まずバッファに行って読み終わっていない数を探して、バッファが数があれば、
取りに来て、もしないならば、待って、ずっとユーザーがEnterキーに入るまで待って、更に数を取り始めます.
getchar()のため;1文字のみ、
例:
1を打つように言われましたが、1を打つだけでEnterキーがなく、入力文は実行されません.
あなたが1を打ったら、またEnterキーを打って、getchar();1を除去するだけで、残りのEnterキーは、バッファにあり、Enterの文を吸収しなければprintf(「Enter 2 please:」);背面のgetchar();入力を待たずにバッファからEnterを取り、プログラムは終了します.
From http://zhidao.baidu.com/link?url=4XRMlbBZ9SuWM1svFIUGLPN-MkuS02ipom17xArlM8FJIW1SDGcaJKnnhGJTlL7284CaAj2RiflYdYW2Y2j1E_
ありがとう
#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_
ありがとう