/*?#include?directives?*/
#include?<stdio.h>?
#include?<stdbool.h>
/*?#define?directives?*/
#define?N?10
/*?declarations?of?exteral?variables?*/
/*?empty?exteral?variables?*/
/*?prototypes?*/
void?avg_sum(double?a[],?int?n,?double?*avg,?double?*sum);
void?print(const?double?*avg,?const?double?*sum);
/***************************************************
*?main:?calls?avg_sum,?print;??????????????????????*
*??????????????????????????????????????????????????*
***************************************************/?
int?main(void)
{
double?array[N],?avg,?sum;
int?i;
for(?;?;)
{
char?ch;
printf("\n\n\tgo?to?main(y/n):");
scanf("%c",&ch);
while(getchar()?!=?'\n')
/*?empty?loop?body*/;
if(ch?==?'y'?||ch?==?'Y')
{
printf("\n\n\tEnter?%d?of?double?number:?",N);
for(i?=?0;?i?<?N;?i++)
scanf("%lf",&array[i]);
avg_sum(array,?N,?&avg,?&sum);
print(&avg,?&sum);
}
else
break;
}
return?0;
}
/***************************************************
*?functions:?avg_sum,?print????????????????????????*
*??????????????????????????????????????????????????*
***************************************************/
void?avg_sum(double?a[],?int?n,?double?*avg,?double?*sum)
{
int?i;
*sum?=?0;
for(i?=?0;?i?<?n;?i++)
*sum?+=?a[i];
*avg?=?*sum?/?n;
return;
}
void?print(const?double?*avg,?const?double?*sum)
{
printf("\n\n\tavg?=?%g",*avg);
printf("\n\n\tsum?=?%g",*sum);
return;
}
/***************************************************
*???test?point?*
***************************************************/
2 回答
已采納

onemoo
TA貢獻883條經(jīng)驗 獲得超454個贊
你上一次輸入的最后按了回車吧。這個換行符也留在輸入流中。
scanf 的格式化字符串中的 %c 會匹配輸入流中的任何一個字符,所以這次 scanf("%c",&ch) 會讀到 '\n' 并存入 ch 中。
scanf 的格式化字符串中的空格會匹配輸入流中的任何空白字符。所以在 %c 前加上空格,這個空格就會把之前留下的那個換行符匹配走(或者說消耗掉了那個換行符)。后面的 %c 就能正常讀到你需要的字符了。
在連續(xù)使用 scanf("%c ... 時一定要注意這個問題。
其實 scanf("%lf"... 也是在兩次輸入之間,但它不會有這個問題。這是因為其他的格式化指示符(如%lf)會忽略輸入流中的空白字符、直接去找后面有意義的字符。

喬巴之無所不能
TA貢獻4條經(jīng)驗 獲得超1個贊
修改:
scanf("%c",&ch); while(getchar()?!=?'\n') /*?empty?loop?body*/;
變?yōu)椋?br />
scanf("?%c",&ch); while(getchar()?!=?'\n') /*?empty?loop?body*/;
在%c之前加了一個空格。程序就能正常運行了。
但是這是為什么?
- 2 回答
- 0 關(guān)注
- 1912 瀏覽
添加回答
舉報
0/150
提交
取消