<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 251  文章 - 504  trackbacks - 0
    <2010年11月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

    本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!

    留言簿(14)

    隨筆分類

    收藏夾

    My Favorite Web Sites

    名Bloger

    非著名Bloger

    搜索

    •  

    積分與排名

    • 積分 - 202468
    • 排名 - 285

    最新評論

     假如你的程序同時需要使用getchar()進行字符輸入和使用 scanf()進行數字輸入.這兩個函數的每一個都能很好的完成工作,
    但是它們不能很好地混合在一起.這是因為getchar()讀取每個字符,包括空格,制表符和換行符;而scanf()在讀取數字時候則
    會跳過空格,制表符和換行符.下面是個例子,
    char1.cpp
    /*C語言一個I/O問題程序*/
    #include<stdio.h>
    void display(char cr,int lines,int width);
    int main(void)
    {
    ? int ch;
    ? int rows,cols;
    ? printf("Enter a character and tow integers:\n");
    ? while((ch=getchar())!='\n')
    ? {
    ???? scanf("%d %d",&rows,&cols);
    ???? display(ch,rows,cols);

    ???? printf("Enter another character and tow integers;\n");
    ???? printf("Enter a newline to quit.\n");
    ? }
    ? printf("Bye.\n");
    ? return 0;
    }
    void display(char cr,int lines,int width)
    {
    ? int row ,col;
    ? for(row =1;row<=lines;row++)
    ? {
    ??? for(col=1;col<=width;col++)
    ??? {
    ????? putchar(cr);
    ?????? }
    ????? putchar('\n');

    ? }
    }
    結果輸出:
    Enter a character and tow integers:
    d 3 2
    dd
    dd
    dd
    Enter another character and tow integers;
    Enter a newline to quit.
    Bye.
    Press any key to continue...

     可以看見緊跟在2后面的那個換行符,scanf()函數將該換行符留在了輸入隊列中.而getchar()并不跳過換行符,所以在循環的
    下一周期,在你有機會輸入其他內容之前,這個換行符由getchar()讀出,然后將其賦值給ch,而ch為換行符正是終止循環的條件.

     要解決這個問題,必須跳過一個輸入周期中鍵入的最后一個數字與下一行開始處鍵入的字符之間的所有換行符或空格.
    改進如下:char2.cpp

    /*C語言一個I/O問題程序修改版本*/
    #include<stdio.h>
    void display(char cr,int lines,int width);
    int main(void)
    {
    ? int ch;
    ? int rows,cols;
    ? printf("Enter a character and tow integers:\n");
    ? while((ch=getchar())!='\n')
    ? {
    ??? if( scanf("%d %d",&rows,&cols)!=2)
    ??? break;
    ???? display(ch,rows,cols);
    ???? while(getchar()!='\n')????? /*剔除掉scanf()輸入后的所有字符.*/
    ???? {

    ??????? printf("1");????????? /*后面有多少字符就輸出多少個1*/
    ??????? continue;

    ???? }
    ???? printf("Enter another character and tow integers;\n");
    ???? printf("Enter a newline to quit.\n");
    ? }
    ? printf("Bye.\n");
    ? return 0;
    }
    void display(char cr,int lines,int width)
    {
    ? int row ,col;
    ? for(row =1;row<=lines;row++)
    ? {
    ??? for(col=1;col<=width;col++)
    ??? {
    ????? putchar(cr);
    ?????? }
    ????? putchar('\n');

    ? }
    }

    輸出結果:
    Enter a character and tow integers:
    d 3 4
    dddd
    dddd
    dddd
    Enter another character and tow integers;
    Enter a newline to quit.
    d 3 4
    dddd
    dddd
    dddd
    11Enter another character and tow integers;
    Enter a newline to quit.

    ?

    ?

    ?

    ?

    posted on 2006-11-03 14:12 matthew 閱讀(2593) 評論(1)  編輯  收藏 所屬分類: 數據結構與算法設計

    FeedBack:
    # re: C語言的混合輸入數字和字符問題 2010-11-23 13:40 冰塵
    我覺得只要在調用函數后面加上 getchar(); 也可以解決。。  回復  更多評論
      
    主站蜘蛛池模板: 99999久久久久久亚洲| 日本免费人成视频在线观看| 亚洲精品免费在线视频| 日本免费人成视频播放| 色欲国产麻豆一精品一AV一免费| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 91香蕉在线观看免费高清| 成人奭片免费观看| 中国一级毛片视频免费看| 亚洲成av人片在www鸭子| 亚洲欧洲精品一区二区三区| 亚洲一区二区三区免费| 在线观看免费大黄网站| 麻花传媒剧在线mv免费观看| 免费国产污网站在线观看| 免费无码专区毛片高潮喷水| 亚洲熟妇无码AV| 亚洲午夜成激人情在线影院 | 国产情侣久久久久aⅴ免费| 美女一级毛片免费观看| 亚洲日韩中文字幕一区| 亚洲中文无码a∨在线观看| 亚洲成色999久久网站| 亚洲人成精品久久久久| 亚洲综合精品网站在线观看| 亚洲高清成人一区二区三区| 成人永久免费福利视频网站| 日本精品人妻无码免费大全| 91久久精品国产免费直播| 日韩内射激情视频在线播放免费| 999zyz**站免费毛片| 久久av免费天堂小草播放| 人妻巨大乳hd免费看| 成年大片免费视频播放一级| 免费一区二区无码视频在线播放| 国产精品亚洲专一区二区三区| 亚洲精品GV天堂无码男同| 亚洲成a∧人片在线观看无码| 亚洲日产乱码一二三区别| 亚洲熟妇AV乱码在线观看| 亚洲人成色77777在线观看|