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

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

scanf的異常行為

scanf的異常行為

C
哆啦的時光機(jī) 2019-09-18 10:18:57
我有如下代碼掃描矩陣,w - 矩陣的寬度,矩陣的h - 高度。我正在使用Visual Studio 2010。每次我得到一個char它會使j增加2(我把斷點加上來了解這種行為)。int w = 0, h = 0;char map[21][21];int i,j;scanf("%d%d", &w, &h);for(i = 1; i <= h; ++i){    for(j = 1; j <= w; ++j){        //fflush(stdin);        scanf("%c",&map[i][j]);        //fflush(stdin);    }}這背后的原因是什么?在掃描時我給出值,w = 7,h = 5。我的代碼中沒有看到任何錯誤....請幫助我。
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊

問題是由于留下的'\n'字符(按下 Enter )scanf。

吃掉這些換行符的一種方法是' '先%c放入scanf;


 scanf(" %c",&map[i][j]);  

        ^

        |

      space

另一種方法是使用一個循環(huán)中的所有吃起來\n的getchar()


  int ch;

  while((ch=getchar())!='\n' && ch != EOF );


查看完整回答
反對 回復(fù) 2019-09-18
?
MM們

TA貢獻(xiàn)1886條經(jīng)驗 獲得超2個贊

您需要跳過之前的尾隨換行符 scanf


不要用 fflush(stdin)


采用:


int c;


while((c=getchar())!='\n' && c != EOF ); //eats newline came from scanf

scanf電話結(jié)束后


查看完整回答
反對 回復(fù) 2019-09-18
?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊

這是對vuppala srikar的回答。他的問題“ 從文本文件[重復(fù)]讀取輸入時fscanf問題 ”在我看來并不完全相同:


在他的問題中,這scanf是在一個打開的文本文件(fptr)上完成的。


代替 :


while((fscanf(fptr,"%c %d",&c,&val))==2)

{

    printf("%c %d\n",c,val);

}

它只讀取文件的第一行,我建議:


char line [50] ;

while (fgets( line,sizeof( line ),fptr ))

    if (sscanf(line,"%c %d",&c,&val)==2)

        {

        printf("%c %d\n",c,val);

        }

我希望我的回答不會太晚......


查看完整回答
反對 回復(fù) 2019-09-18
  • 3 回答
  • 0 關(guān)注
  • 490 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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