C語言簡單記-printf與scanf詳解

「C語言簡單記」基於我之前學習過程當中作過的筆記、隨筆,特地整理了一下,只是簡單的記錄了一些比較重要的知識點,不會去深刻探究,面向的是一些有語言基礎的人查找閱讀,還請見諒,謝謝~~~函數


當初仍是小白的我剛接觸C語言,那時候什麼都不懂,printf和scanf傻傻分不清楚
.想一想當初好傻好天真,哈哈哈!(賣的一手好萌)學習

printf

1.格式控制符使用說明

  • printf的格式控制的完整格式:code

    • "% - 0 m.n l或h 格式字符"開發

  • 下面對組成格式說明的各項加以說明:字符串

    • %:表示格式說明的起始符號,不可缺乏。博客

    • -:有-表示左對齊輸出(右側補空格),如省略表示右對齊輸出(左側補空格)。table

    • 0:有0表示指定空位填0,如省略表示指定空位不填。基礎

    • m.n:m指域寬,即對應的輸出項在輸出設備上所佔的字符數。N指精度。用於說明輸出的實型 數的小數位數。對數值型的來講,未指定n時,隱含的精度爲n=6位。變量

    • l或h:l對整型指long型,對實型指double型。h用於將整型的格式字符修正爲short型。數據類型

    • 格式字符(格式字符用以指定輸出項的數據類型和輸出格式)

      • d格式:用來輸出十進制整數。有如下幾種用法:

      • %d %hd %ld

      • o格式:以無符號八進制形式輸出整數

      • x格式:以無符號十六進制形式輸出整數

      • f格式:用來輸出實數(包括單精度,雙精度),以小數形式輸出

      • u格式:以無符號十進制形式輸出整數

      • c格式:輸出一個字符

      • s格式:用來輸出一個串。有幾中用法

%s:例如:printf("%s","CHINA")輸出"CHINA"字符串(不包括雙引號)。

%ms:輸出的字符串佔m列,如字符串自己長度大於m,則突破獲m的限制,將字符串所有輸出。若串 長小於m,則左補空格。

%-ms:若是串長小於m,則在m列範圍內,字符串向左靠,右補空格。

%m.ns:輸出佔m列,但只取字符串中左端n個字符。這n個字符輸出在m列的右側,左補空格,注 意:若是n未指定,默認爲0。

%-m.ns:其中m、n含義同上,n個字符輸出在m列範圍的左側,右補空格。若是n>m,則自動取n值,即保證n個字符正常輸出,注意:若是n未指定,默認爲0。
若是是sprintf(desc, "%m.ns", sour);
若是desc空間夠的話,會在%m.ns 串 的結尾自動補null 字符,不一樣於strncpy。
例如 :sprintf(desc, "%.3s", "123456"); desc若是空間>=4字節的話,第4個字節將是null字 符。

2.實型輸出問題

  • %f:不指定寬度,整數部分所有輸出並輸出6位小數。

// 默認輸出6位小數
    printf("%f", 3.1415926535f);
    輸出結果: 3.141593
  • 指定保留多少位小數

// 經過%.nf方式,指定保留多少位小數
    printf("%.2f", 3.1415926535f);
    輸出結果: 3.14

3.實型精度問題

  • 對於單精度數,使用%f格式符輸出時,僅前7位是有效數字,小數6位.

  • 對於雙精度數,使用%lf格式符輸出時,前15位是有效數字,小數6位

進制 float double
十進制有效位數 7位 15位
二進制有效位數 24位 53位
  • 一個練習引起的血案

    • 要求輸出3.1415926535f全部小數

// 嘗試經過指定保留位數
    printf("%.10f", 3.1415926535f);
    輸出結果: 3.1415927410
    // float有效數字是7位, 多餘位數則會顯示垃圾數據(不許確)

    // 什麼是有效位?
    printf("%.10f", 314159.26535f);
    輸出結果: 314159.2500000000

// 嘗試指定寬度
    printf("%12f", 3.1415926535f);
    輸出結果: $$$$3.141593 注意$表明空格

// 嘗試指定寬度和保留位數
    printf("%12.10f", 3.1415926535f);
    輸出結果: 3.1415927410

// 要想完整輸出必須使用double, 由於double類型精度小數點後6位,有效數字是15位
    double doubleValue = 3.1415926535; // 注意後面沒有f
    printf("%.10lf", doubleValue);
    輸出結果:3.1415926535

scanf函數格式控制符

格式 意義
d 輸入一個十進制整數
o 輸入一個八進制整數
x 輸入一個十六進制整數
i 輸入一個有符號或無符號的十進制、八進制、十六進制整數
u 輸入一個無符號十進制整數
f 、e或E、 g或G 輸入一個小數形式或指數形式的浮點數
c 輸入一個字符
s 輸入一個字符串
  • 獲取整形數據

// 1.定義變量用於接收輸入數據
    int num = 0;
    // 2.利用scanf函數接收用戶輸入數據
    scanf("%d", &num);
    // 3.打印驗證結果
    printf("num = %d", num);
  • 獲取實數型數據

// 1.定義變量用於接收輸入數據
    float num = 0;
    // 2.利用scanf函數接收用戶輸入數據
    scanf("%f", &num);
    // 3.打印驗證結果
    printf("num = %d", num);

注:不加\n,須要加&取地址

  • 非法的輸入

    • 除"空格","回車","tab"以外, 若是輸入的數據和scanf接收的數據不匹配將會自動結束接收


更多關於iOS學習開發的文章請登錄個人我的博客www.zhunjiee.com,歡迎前來參觀學習

相關文章
相關標籤/搜索