#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>//字符串處理
#define HEIHTBASE 150? //常量 ? ?150等數(shù)據(jù)并不存在于常量區(qū),他為字面值,所有的數(shù)值都屬于字面值
int main()
{
char name[40];? ? //字符串
double weight;
float height;
int letters = 0;
const int WEIGHTBASE = 48;? //常量
const double CARDINAL = 0.6;
printf("Hi!你叫什么(英文)\n"); ?//雙引號(hào)內(nèi)的菜蔬存儲(chǔ)于常量區(qū)當(dāng)中的
scanf_s("%s",name,sizeof(name)-1);//獲取字節(jié)長(zhǎng)度
name[0] = 'M';
name[1] = 'a';
name[2] = 'r';
name[3] = 'k';? //修改數(shù)組的某個(gè)值
name[4] = '\0';? ? //字符串到此時(shí)結(jié)束,后面的不再輸出
printf("%s,你有多重(KG)?\n",name);
scanf_s("%lf",&weight);
printf("And,你有多高(CM)?\n");
scanf("%f", &height);
letters = strlen(name);? ? ? //獲取文字長(zhǎng)度
printf("太棒了!你的名字共計(jì)字母%u個(gè)!\n",letters);
printf("你的體重為%G,標(biāo)準(zhǔn)體重為%2.2f!\n", weight, (height - WEIGHTBASE)*CARDINAL + WEIGHTBASE);
getchar();
getchar();
return 0;
}
字符串:從三個(gè)方面來(lái)講解字符串
一、表現(xiàn)形式:在一個(gè)雙引號(hào)當(dāng)中括起來(lái)的我們將它稱(chēng)之為字符串,例,"xxxxxx";在C語(yǔ)言當(dāng)中,字符串的表現(xiàn)形式一直是這樣的,在一些其他語(yǔ)言當(dāng)中,可能會(huì)是其他表現(xiàn)形式,但是一定有一個(gè)標(biāo)識(shí)符的,其中用的最多的還是雙引號(hào),但是這個(gè)表現(xiàn)形式其實(shí)只是我們看到的表面狀況
\0為轉(zhuǎn)義字符,字符串的尾,可以看上面代碼的注釋了解其用處和方法
二、存儲(chǔ)形式;字符串在C語(yǔ)言當(dāng)中,他會(huì)有兩個(gè)地方來(lái)進(jìn)行存儲(chǔ),一種稱(chēng)為常量存儲(chǔ),另外一種稱(chēng)為數(shù)組存儲(chǔ),例,printf("Hi!你叫什么(英文)\n");這里面的字符串我們稱(chēng)之為存儲(chǔ)在常量區(qū)的字符串;
內(nèi)存將會(huì)分為四大區(qū)域,分別是棧區(qū),堆區(qū)。代碼區(qū)和常量區(qū)
棧區(qū)存放函數(shù)的返回地址,傳遞的值,傳遞的參數(shù)等等;
堆區(qū)是由我們自己來(lái)控制的;
代碼區(qū)是不可更改的,因?yàn)橐坏└模绦蜻壿嬀腿菀装l(fā)生改變;
常量區(qū)也是用來(lái)存儲(chǔ)數(shù)據(jù)的,而這個(gè)數(shù)據(jù)有所區(qū)別,這個(gè)數(shù)據(jù)時(shí)不可更改的
再?gòu)??程序=算法*數(shù)據(jù),搜有的算法集中在代碼區(qū)當(dāng)中,是不可更改的,其余的區(qū)域全部存放數(shù)據(jù);臨時(shí)數(shù)據(jù)存放在棧區(qū),需要永久不停使用的存放在堆區(qū),常量區(qū)存放的是不能夠被修改的數(shù)據(jù)
如果希望字符串更夠被修改,需要把字符串存儲(chǔ)在字符數(shù)組當(dāng)中,數(shù)組是同一類(lèi)型數(shù)據(jù)的集合
數(shù)組的表達(dá)類(lèi)型是char(int、double等等) name[40] ? char代表數(shù)組類(lèi)型,name代表當(dāng)前數(shù)組名稱(chēng)[40]代表數(shù)組有多大的空間,如果輸入的數(shù)組空間比規(guī)定數(shù)組空間打, 就會(huì)發(fā)生不可預(yù)料的錯(cuò)誤,因?yàn)樗鼤?huì)將他所分配的空間之外的內(nèi)容覆蓋掉,當(dāng)產(chǎn)生覆蓋的時(shí)候,就會(huì)導(dǎo)致程序出現(xiàn)不可知的錯(cuò)誤
sizeof(name)是獲取當(dāng)前數(shù)組能夠接受多大的大小
一般情況下給數(shù)組的空間賦值是name[255]或者MAXBYTE,最好使用MAXBYTE,因?yàn)橛?55容易產(chǎn)生魔數(shù),不過(guò)這樣容易產(chǎn)生內(nèi)存浪費(fèi),最好是能夠用動(dòng)態(tài)數(shù)組,這是后面才會(huì)學(xué)到的
數(shù)組的名稱(chēng)就相當(dāng)于內(nèi)存地址,而字符串的當(dāng)中,還有一個(gè)不一樣的元素,稱(chēng)之為下標(biāo),使用下標(biāo)可以定位到當(dāng)前數(shù)組當(dāng)中所指定的元素,上面的name[40]的元素值是0-39
輸出字符串使用%s;