1.輸入不說(shuō)明有多少個(gè)Input,以EOF為結(jié)束標(biāo)志
(1)這里要說(shuō)明的是如果輸入 1 2 3 4 (回車(chē))蔫浆,這時(shí)會(huì)輸出 3 7窟蓝,但不會(huì)輸出count挠阁,因?yàn)檫@里回車(chē)并不是EOF乱灵,作用是刷新輸出buffer,但并不是文件輸入結(jié)束的標(biāo)志文黎。通常EOF是crtl+Z惹苗!
#include<stdio.h>
int main()
{
int a, b,count = 0;
while(scanf("%d%d",&a, &b) != EOF)
{
count ++;
printf("%d\n",a + b);
}
printf("The couple of data is: %d\n",count);
return 0;
}
(2)但是使用scanf會(huì)有很多bug:Scanf返回2(2個(gè)輸入)殿较,返回1(1個(gè)輸入),格式不正確異常返回0鸽粉,輸入EOF返回-1。經(jīng)過(guò)測(cè)試發(fā)現(xiàn)只有輸入回車(chē)+ctrlZ的時(shí)候scanf才會(huì)正常的返回-1抓艳,其他任何輸入方式都會(huì)返回0触机,從而是while無(wú)法停止,具體沒(méi)看了玷或,所以還是最好用cin,cout進(jìn)行輸入輸出控制..
(3)經(jīng)過(guò)測(cè)試發(fā)現(xiàn):無(wú)論輸入的是單數(shù)個(gè)數(shù)據(jù)還是雙數(shù)個(gè)數(shù)據(jù)儡首,輸入ctrlZ時(shí)有沒(méi)有空格,都可以得到正確結(jié)果
#include <iostream>
using namespace std;
int main()
{
while(cin>>a>>b)
{
count++;
cout<<a+b<<endl;
}
cout<<"The couple of data is: "<<count<<endl;
}
2. 輸入指定輸入個(gè)數(shù)
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a>>b;
cout<<a+b<<endl;
}
3.未知輸入數(shù)目偏友,以某個(gè)特定字符為結(jié)束符
(1)輸入兩個(gè)0 0 就結(jié)束了
while(scanf("%d %d",&a,&b) &&(a!=0 && b!=0)) 由于&&運(yùn)算符是短路運(yùn)算蔬胯,所以,如果你輸入的是0 5位他,輸入正確氛濒,a!= 0為假,整個(gè)邏輯表達(dá)式的值就為假鹅髓,跳出結(jié)束程序舞竿,與題目輸入規(guī)則相矛盾!
while(scanf("%d%d",&a,&b))
{
if(0 == a && 0 == b)
break;
printf("%d\n",a + b);
}
(2)輸入換行就結(jié)束了窿冯,注意這在cin中是不行的骗奖,因?yàn)閏in是不認(rèn)換行符的..
char c='0';
while(c!='\n')
{
scanf("%d",&a);
//printf("%d ",a);
scanf("%c",&c);
}
cout<<"Hello!!"<<endl;