当前位置:网站首页>C primer plus學習筆記 —— 2、常量與格式化IO(輸入/輸出)

C primer plus學習筆記 —— 2、常量與格式化IO(輸入/輸出)

2022-06-23 05:40:00 Charles Ren

常量和變量

明示常量

明示常量又叫符號常量,define修飾的字符
#define TAX 0.15
在編譯程序時就會將TAX都替換成0.15。在運行程序前所有的替換已經完成。
作用:提高程序的可讀性和可維護性。

const修飾的變量

const修飾的是變量,但是是只讀的。
他是運行期才分配內存。存儲比特置和常量也不同。

常用常量

在這裏插入圖片描述
在這裏插入圖片描述

轉換的意義

轉換說明把以二進制格式存儲在計算機中的值,轉換成字符串便於顯示
比如76這個值,他在計算機中就是01001100。
使用%d的意識是“把給定的值翻譯成十進制文本並打印出來”。所以%d將其轉換成字符7和6並顯示為76。

printf 打印類型

printf打印不同類型值所使用的符號,使用錯誤的說明符會打印意想不到的結果。
printf("%c %d", '$', 2*a) printf打印的是值,無論變量,常量,還是錶達式。

整型轉換

轉換說明輸出
%d十進制顯示,可打印int 和short,也可以寫做%i
%ldlong
%lldlong long int
%o八進制int
%lo八進制long
%x十六進制int
%lx十六進制long
%#o八進制加前綴0顯示
%#x十六進制加前綴0x顯示
%#X十六進制加前綴0X顯示
%uunsigned int
%luunsigned long
%4d最小的字段寬度,如果不够容納待打印的數,則自動擴充
%zd或者%zu,錶示size_t類型的值,sizeof()或者strlen()運算返回的結果類型。在早期C用%ul來接收

浮點數轉換

轉換說明輸出
%f浮點數十進制記數法錶示float或double,float會被自動轉為double輸出
%6.2f錶明待打印的數⾄少占6個字符寬度,且⼩數點後⾯有2比特⼩數,⼩數點占⼀比特,所以整數部分⾄少占3比特
%.2f錶示整數部分正常,小數部分保留2比特他和%0.2f含義相同
%Lflong double 這個要大寫
%e使用e計數法來錶示浮點數
%g根據值自動選擇%f或者%e

打印不同精度的浮點數
https://blog.csdn.net/dodamce/article/details/115297198

其他轉換

轉換說明輸出
%c單個字符
%s字符字符串
%p指針的值
%%打印一個百分號
\n換行
\\斜杠
\’單引號
\"雙引號

標記

在這裏插入圖片描述

#define PAGES 959
int main(void)
{
    
    printf("*%d*\n", PAGES);
    printf("*%2d*\n", PAGES);
    printf("*%10d*\n", PAGES);//打印10個字符寬度
    printf("*%-10d*\n", PAGES);//左對齊
    return 0;
}

//*959*
//*959*
//* 959*
//*959 *
// floats.c -- some floating-point combinations
#include <stdio.h>
int main(void)
{
    
    const double RENT = 3852.99;  // const-style constant
    printf("*%f*\n", RENT); // 保留6比特小數
    printf("*%e*\n", RENT); //e錶示法
    printf("*%4.2f*\n", RENT); //4寬度,2比特小數,寬度不够則顯示原數
    printf("*%3.1f*\n", RENT);
    printf("*%10.3f*\n", RENT); //10寬度,3比特小數
    printf("*%-10.3f*\n", RENT); //左對齊
    printf("*%10.3E*\n", RENT);
    printf("*%+4.2f*\n", RENT); //顯示符號
    printf("*%010.2f*\n", RENT); //用0填充不够的比特
    
    return 0;
}
// *3852.990000*
// *3.852990e+03*
// *3852.99*
// *3853.0*
// * 3852.990*
// *3852.990 *
// * 3.853E+03*
// *+3852.99*
// *0003852.99*

打印字符串

打印較長字符串換行有三種方法,

  1. 使用多個printf語句。
  2. 使用反斜杠,但是第二行必須左對其,不然就會有空格
  3. (推薦)使用雙引號鏈接符
int main(void)
{
    
    printf("Here's one way to print a ");
    printf("long string.\n");
    printf("Here's another way to print a \ long string.\n");
    printf("Here's the newest way to print a "
           "long string.\n");      /* ANSI C */
    
    return 0;
}

scanf函數

C語言庫有多個輸入函數,但是scanf是最通用的一個,因為他可以讀取不同格式的數據。
scanf和printf使用方式基本一樣,但是注意一點。scanf函數使用的是指向變量的指針。
也就是使用的時候注意兩個技巧:

  1. scanf讀取基本變量類型的值在變量名前面一個&
  2. 把字符串讀入字符數組,變量名前不用&

scanf函數使用空白(換行符,制錶符和空格)把輸入分成多個字段。也就是用空白作為分隔符。

scanf所使用的轉換說明與printf相同,見上面錶格。唯一一點不同,scanf會將所有輸入的浮點數類型都應用到float類型上。

舉例

scanf讀取一個%d,也就是讀取一個整數:

  1. 他會跳過輸入的空白字符,從第一個非空白字符開始讀取
  2. 然後讀取數字字符,直到遇到非數字字符,他便認為讀到了整數的末尾。
  3. 然後將該數字放入到變量。

如果使用%s轉換說明,scanf會讀取空白以外的所有字符。

  1. 他會跳過輸入的空白字符,從第一個非空白字符開始讀取
  2. 依次讀取字符直到再遇到空白,停止。

其他輸入函數

我們看到如果我要讀取帶空格的字符串使用scanf就無法讀取了。
使用getchar()和fgets()更適合處理一些字符串的特殊情况。後面會再講。
只是scanf是一種更通用的輸入方式。

格式輸入

scanf("%d,%d:, &n, &m);
則輸入必須以下形式
55,45

scanf("%d %d:, &n, &m);
則輸入必須是一下形式
55 45

原网站

版权声明
本文为[Charles Ren]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/174/202206230355164070.html