程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++-為什麼這段代碼循環輸出的數組少了第一個元素且多出了一個隨機數?

c++-為什麼這段代碼循環輸出的數組少了第一個元素且多出了一個隨機數?

編輯:編程綜合問答
為什麼這段代碼循環輸出的數組少了第一個元素且多出了一個隨機數?

輸入一些非負實數 用數組輸出這些數 求平均數並輸出(輸入負數時報錯並退出重新輸入,輸入回車時執行下一步操作)

#include
using namespace std;
int main()
{
int i,j,k;
double a[100],sum=0,avr;
part1:
cout<<"輸入數字"< j=0,k=0;
for (i=0;getchar()!='\n';i++)
{
cin>>a[i];
if (a[i]< 0)
{
j=1;
}
k++;
}
if(j==1)
{
cout<<"您在數據中輸入了一個負數"<<endl;
goto part1;
}
cout<<"輸入的數據為:"<<endl;
for(i=0;i<=k;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
for(i = 0;i<=k;i++)
{
sum=sum+a[i];
}
avr=sum/(k+1);
cout<<avr;
return 0;
}

最佳回答:


.用戶輸入的字符被存放在鍵盤緩沖區中.直到用戶按回車為止(回車字符也放在緩沖區中).當用戶鍵入回車之後,getchar才開始從stdio流中每次讀入一個字符..如用戶在按回車之前輸入了不止一個字符,其他字符會保留在鍵盤緩存區中,等待後續getchar調用讀取.也就是說,後續的getchar調用不會等待用戶按鍵,而直接讀取緩沖區中的字符,直到緩沖區中的字符讀完為後,才等待用戶按鍵.

第一個字符被getchar()用掉了。

    for (i=0;getchar()!='\n';i++)
    {
        cin>>a[i];
        if (a[i]< 0)
        {
            j=1;
        }
        k++;
    } 

後面的循環應該是i<k,多了一次,輸出了一個隨機數

    for(i=0;i<=k;i++)
    {
        cout<<a[i]<<" ";
    }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved