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

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

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

    dream.in.java

    能以不變應萬變是聰明人做事的準則。萬事從小事做起,積累小成功,問鼎大成功,是成功者的秘訣。

    C語言輸入輸出總結

    C語言輸入輸出總結
    2007-09-29 13:58

    C語言中基本的輸入輸出函數有:

    putchar ():把變量中的一個字符常量輸出到顯示器屏幕上;
    getchar ();從鍵盤上輸入一個字符常量,此常量就是該函數的值;
    printf    ();把鍵盤中的各類數據,加以格式控制輸出到顯示器屏幕上;
    scanf     ();從鍵盤上輸入各類數據,并存放到程序變量中;
    puts      ():把數組變量中的一個字符串常量輸出到顯示器屏幕上;
    gets      ():從鍵盤上輸入一個字符串常量并放到程序的數組中.
    sscanf(); 從一個字符串中提取各類數據。

          putchar() 和 getchar() 顧名思議就是從輸入流中獲取一個字符和輸出一個字符,比較簡單,不再多講。
    例子如下:
    char c = getchar();
    putchar(c);

          格式化輸入輸出scanf()和printf()是最有用的,所以重點講一下。

    printf():
    一般形式:
    printf("格式控制".輸出列表);  
    eg : printf("a=%d,b=%f,c=%c\n",a,b,c);
    1;格式控制.
    格式控制是用雙引號括起來的字符串,也稱"轉換控制字符串",它包含以下兩部分信息.
    格式說明:由"%"和格式字符組成,如%d,%f,%c,他的作用是把輸出數據轉換為指定格式輸出,格式的說明總是由"%"字符開始的.
    普通字符:需要原樣輸出的字符,或者是一些有特殊含義的字符,如\n,\t。

    2;輸出列表
    就是需要輸出的一些數據,也可以是表達式,如果在函數中需要輸出多個變量或表達式,則要用逗號隔開.

          一些特殊字符的輸出:
    單引號,雙引號,和反斜杠的輸出在前面加轉義字符”\”
    如:”\’”    ,    “\””     ,    “\\”
    %的輸出用兩個連在一起的%%,即printf(“%%”);


    常用的格式說明如下:
    格式字符
    d    以十進制形式輸出帶符號整數(正數不輸出符號)
    o    以八進制形式輸出無符號整數(不輸出前綴O)
    x    以十六進制形式輸出無符號整數(不輸出前綴OX)
    u    以十進制形式輸出無符號整數
    f    以小數形式輸出單精度實數
    lf以小數形式輸出雙精度實數
    e    以指數形式輸出單、雙精度實數
    g    以%f%e中較短的輸出寬度輸出單、雙精度實數
    c    輸出單個字符
    s    輸出字符串

          這里強調一下:網上很多文章都說f 和lf是一樣的,即不管單精度,雙精度浮點數,都可以用f, 但我在POJ上做過測試,輸出Double時用f確實也可以 ,但讀入時,用f就報WA,所以大家如果對Double進行讀寫的話,都用lf吧。
    說到Double,再啰嗦一句,建議大家要用到浮點數時都用Double,不要用float,因為在很多情況下,float精度不夠會導致WA。

    特殊:
    對64位整數的輸入輸出,在POJ上的C++環境下(即VC),64位整數是:
    __int64      (注意int前面是兩個下劃線)
    輸入輸出格式為”%I64d”.
    在G++環境下(即Dev C++) 64位整數是
    long long
    輸入輸出格式為”%lld”.


    輸出寬度

      用十進制整數來表示輸出的最少位數。 注意若實際位數多于定義的寬度,則按實際位數輸出, 若實際位數少于定義的寬度則補以空格或0。

    精度
      精度格式符以“.”開頭,后跟十進制整數。意義是:如果輸出數字,則表示小數的位數;如果輸出的是字符, 則表示輸出字符的個數;若實際位數大于所定義的精度數,則截去超過的部分。

    標志格式字符
    -    結果左對齊,右邊填空格
    +    輸出符號(正號或負號)空格輸出值為正時冠以空格,為負時冠以負號

    例如:
    double c=24212345.24232;
    printf(“%020.4”);    表示輸出精確到小數點后4位,輸出占20位,若有空余的位補0.

          scanf:

    scanf的很多用法都是和printf對應的,故不再贅述。
    說一下scanf一個特別好用的地方,就是可以濾去一些不想要的東西。
    舉例說明如下:
    比如輸入為日期 yyyy-mm-dd,就可以這樣寫:
    int year,moth,day;
    scanf(“%d-%d-%d”,&year,&moth,&day);
    再比如:
    scanf("%3d %*3d %2d",&m,&n);        輸入113 118 69回車(系統將113賦予m,將69賦予n,因為*號表示跳過它相應的數據所以118不賦予任何變量)

    puts()用的不多,且基本都能用printf()代替,故不再多說。

    gets()是從輸入流中獲取一行字符串放入字符數組中:
    char in[100];
    gets(in);

    大家可能最容易出錯的地方就是字符串的輸入,所以強調一下:
    能進行字符,字符串輸入的有:
    getchar(), scanf(“%c”); scanf(“%s”), gets()

    其中getchar() 和 scanf(“%c”)的功能是一樣的。
    需要注意的是,這兩個函數讀入的是輸入流中當前位置的字符,
    比如:
          scanf(“%d”,&n);
               c = getchar();
    假設輸入 67/ (假設“/”代表回車),則第一個scanf讀入一個整數67后,當前輸入流的位置是67之后,即指向回車符,所以第二個getchar()讀入的就是一個回車符了,即 c = ‘\n’。

    同樣,gets()也是從當前位置讀入一行字符串。
    比如:
    scanf(“%d”,&n);
    gets(str);
    此時讀入字符數組中的字符串就是“\n” 了
    所以通常在用scanf讀入一個非字符串的類型之后,如果要讀入字符,或字符數組,都用一個額外的getchar()把回車符讀掉,若后面跟的不止一個回車符,可能還有多余的空格的話,就用gets()讀掉。

          和以上不同的是,scanf(“%s”) 讀入的時候是會忽略掉空格,回車和制表符的。并且以空格,回車和制表符作為字符串結束的標志。

          經常會有這樣的題,輸入第一行是一個整數,接下來每行的第一個是一個字符,用來表示某種操作,后面再跟一些數據,比如:
    4
    A 100 2
    B 23
    A 23 89
    B 34
    像這種輸入就需要小心,讀入字符時不要讀成回車符。
    為了防止意外,我一般是這樣處理這類輸入的:
    char model[2];
    Scanf(“%d”,&n);
    for(…,…,…){
          scanf(“%s”,model);
          if(model[0] == ‘A’){
    }
    else{
    }
    }

          sscanf():
    sscanf()經常用來分解字符串,功能非常強大,但很多功能都需要正則表達式的知識,所以就介紹一下最簡單的幾種用法,大家如果想了解更多的話,自己去網上找吧。
    1.
    char str[100],str1[100],str2[100];
    gets(str);
    sscanf(str,”%s%s”,str1,str2);
    將讀入的一整行字符串按空格,制表符或回車符分割成兩個字符串。
    2
    取指定長度的字符串。如在下例中,取最大長度為4字節的字符串。
      sscanf("123456 ", "%4s", str);


          對于C++的輸入輸出就不再詳細的講了,因為cin,cout的速度實在太慢,不推薦使用,我一般都是到萬不得已時才用。
          比如當你要讀入字符串到string 對象中時,就只能用cin了,這時候還有一個常見的問題,就是如何將一整行字符串讀入一個string 中,這就要用到getline函數了。
    用法為:
    getline(cin, str);
    第一個參數就是標準輸入流cin ,第二個參數是接收讀入數據的string對象,本來還有第三個參數,是結束符的標志,但通常用它默認的就可以了,所以不用管。

    注意區分這個getline和cin.getline的區別:
    cin.getline的用法如下:
    char str[20];
    cin.getline(str,20); 表示從讀入的一行字符串中,取最多20各字符放入字符數組str中,注意此處的str是字符數組,而上面的str是string對象。


          另外需要注意的是,千萬不要把cout和printf混用,因為cout是帶緩沖的而printf不帶,所以會使得輸出的數據順序混亂。

    posted on 2009-03-12 16:45 YXY 閱讀(688) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲丝袜中文字幕| 亚洲蜜芽在线精品一区| 老司机午夜免费视频| 全免费a级毛片免费看无码| 亚洲欧美熟妇综合久久久久| 巨胸喷奶水视频www网免费| 亚洲av日韩综合一区二区三区| 精品少妇人妻AV免费久久洗澡 | 亚洲中文字幕无码爆乳AV| 国产精品免费αv视频| 无码乱人伦一区二区亚洲一| 1a级毛片免费观看| 97se亚洲国产综合自在线| 日本二区免费一片黄2019| 午夜在线免费视频 | 亚洲综合图色40p| 免费黄网站在线看| 亚洲图片激情小说| 永久免费看bbb| 国产激情久久久久影院老熟女免费| 亚洲成在人线av| 免免费国产AAAAA片| 美女啪啪网站又黄又免费| 亚洲精品无码久久千人斩| 99精品视频在线免费观看| 亚洲永久网址在线观看| 亚洲精品高清一二区久久| 无码精品国产一区二区三区免费| 亚洲AV综合色区无码二区爱AV| 免费一级特黄特色大片在线观看 | 免费专区丝袜脚调教视频| 久久亚洲精品无码av| 久久亚洲国产精品一区二区| 黄色永久免费网站| 日日摸夜夜添夜夜免费视频| 亚洲国产一区二区三区青草影视| 在线观看成人免费| 最新亚洲成av人免费看| 亚洲色在线无码国产精品不卡| 色噜噜亚洲精品中文字幕| 免费三级毛片电影片|