第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請大家?guī)臀铱纯催@個C程序為什么不能第二次進入主循環(huán)?

請大家?guī)臀铱纯催@個C程序為什么不能第二次進入主循環(huán)?

C
喬巴之無所不能 2017-10-22 10:50:56
/*?#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)會忽略輸入流中的空白字符、直接去找后面有意義的字符。

查看完整回答
反對 回復(fù) 2017-10-22
?
喬巴之無所不能

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之前加了一個空格。程序就能正常運行了。

但是這是為什么?

查看完整回答
反對 回復(fù) 2017-10-22
  • 2 回答
  • 0 關(guān)注
  • 1912 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號