字符串
字符串是一系列被視爲一個處理單元的字符,在 C 語言中,字符串是以空字符位結尾的一系列字符,它存儲在字符數組中。
C 預處理器
C 預處理器爲預處理指令(以 # 符號開始)查找源代碼程序,在開始編譯程序之前處理它們,如 #include 指令、#define 指令。
printf() 和 scanf()
輸入輸出函數能讓用戶與程序交流,它們是輸入輸出函數,或簡稱 I/O 函數。
getchar() 與 scanf()
getchar 讀取每個字符,包括空格、製表符和換行符;而 scanf 在讀取數字時則會跳過空格、製表符和換行符。
代碼示例
輸出函數練習
#include<stdio.h>
#include<string.h>
//define 通過預處理器定義常量,編譯時進行替換
#define PRAISE "You are an extraodinary being" //編譯器會在末尾加上空字符 \0
#define PAGES 959
#define BLURB "Authentic imitation"
#define PAGES 336
#define WORDS 65618
int main(void) {
char name[40]; //C 語言的字符串存儲在字符數組中
int a = 0;
const double RENT = 3852.99; //const 限定一個變量只讀
short num = PAGES;
short mnum = -PAGES;
float n = 3.0;
double n1 = 3.0;
long n2 = 2000000000;
long n3 = 1234567890;
printf("What is your name ?");
scanf_s("%s",name,sizeof(name)); //輸入時自動把空字符 \0 放入字符串末尾並只讀一個單詞
printf("Hello,%s.%s\n", name, PRAISE);
//strlen() 空字符不計入,sizeof() 空字符也會計算在內
printf("strlen() = %zd,sizeof = %zd\n", strlen(name), sizeof(name));
//printf 函數格式:printf(格式字符串,待打印項1,待打印項2,...);
//格式字符串包含每個待打印項對應的轉換說明,用雙引號括起來,
//字段寬度打印整型時效果
printf("*%d*\n", PAGES);
printf("*%2d*\n", PAGES); //字段寬度自動擴大以符合整數長度
printf("*%10d*\n", PAGES); //10個空格寬度
printf("*%-10d*\n", PAGES); //數字位於字段左側
//浮點型修飾符的組合
printf("\n");
printf("*%f*\n", RENT); //寬度和爲數爲系統默認設置,6位
printf("*%e*\n", RENT); //科學記數法
printf("*%4.2f*\n", RENT); //最小寬度 4,保留 2 位小數
printf("*%3.1f*\n", RENT); //四捨五入,最小寬度 3,保留 1 位小數
printf("*%10.3f*\n", RENT); //最小寬度 10,保留 3 位小數
printf("*%10.3E*\n", RENT); //科學記數法
printf("*%+4.2f*\n", RENT); //代數符號 +
printf("*%010.2f*\n", RENT); //第一個 0 是標記,小數點之前指定字段寬度
//格式標記
printf("\n");
printf("%x %X %#x\n", 31, 31, 31); //十六進制數,帶符號十六進制數
printf("%5.3d,%5.3f\n", 6, 6.0); //整數保留三位,小數點後保留三位
printf("%05d,%05.3d\n", 6, 6); //0 標記用 0填充字段寬度,0與精度出現會被忽略
//字符串格式
printf("[%2s]\n",BLURB); //字段被擴大容納字符串中所有字符
printf("[%24s]\n", BLURB); //24 寬度
printf("[%24.5s]\n", BLURB); //只打印 5 個字符
printf("[%-24.5s]\n", BLURB); //左對齊打印五個字符
//轉換格式打印
printf("-num %hd,unsigned short %hu\n", mnum, mnum); //無符號打印 65536 - 336
printf("num as char:%c\n", num); //取後 1 個字節,除以 256 餘 80 是字符 P
printf("%ld %ld %ld \n", n,n1,n2); //n,n1,n2 順序存放棧內,根據轉換類型取字節
return 0;
}
輸入函數練習
#include<stdio.h>
int main(void) {
//scanf() 讀取基本變量類型前加 &
// 字符串讀入字符數組中不加 &
int age;
float assets;
char pet[30];
double number = 256.6;
int width;
printf("Enter your age,assets,and favorite pet.\n");
scanf_s("%d %f", &age, &assets);
scanf_s("%s", pet,20);
printf("%d $%.2f %s\n", age, assets, pet);
//printf() 函數中用 * 修飾符代替字段寬度
scanf_s("%d", &width);
printf("number = %*.*f\n", width, width, number);
//scanf() 函數中 * 修飾符是跳過相應的輸出項
scanf_s("%*d%*d%d", &width);
printf("The last integer was %d\n", width);
return 0;
}