一:格式輸出函數(shù)printf()
創(chuàng)新互聯(lián)是一家從事企業(yè)網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)站建設(shè)、行業(yè)門(mén)戶網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)制作的專業(yè)網(wǎng)站設(shè)計(jì)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁(yè)設(shè)計(jì)人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹(shù)立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來(lái)曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)上千多家。
1、調(diào)用形式一般為:printf("格式化控制字符串",輸出表列);
2、格式化控制字符串用于指定輸出格式,它有三種形式:
1、格式說(shuō)明符:規(guī)定了相應(yīng)輸出表列內(nèi)容的輸出格式,以%打頭,如%d、%o等
2、轉(zhuǎn)義字符:用來(lái)輸出轉(zhuǎn)義字符所代表的控制代碼或者特殊字符,比如常用的‘\n'、‘\t'
3、普通字符:需要原樣輸出的字符。
3、輸出表列為若干需要輸出的數(shù)據(jù)項(xiàng),它與格式說(shuō)明符在數(shù)量和類型上一一對(duì)應(yīng);
4、格式字符m指定輸出數(shù)據(jù)所占寬度,n對(duì)實(shí)數(shù)表示輸出n位小數(shù),對(duì)字符串表示截取的字符個(gè)數(shù),+表示右對(duì)齊,通常省略。
—表示左對(duì)齊,l用于長(zhǎng)整型數(shù)據(jù),可加在d、o、x、u前,更多格式說(shuō)明符及其組合形式如下所示:
格式字符
數(shù)據(jù)對(duì)象
輸出形式
數(shù)據(jù)輸出方法
%(+)-md
int
unsigned
int
short
unsigned
short
char
十進(jìn)制整數(shù)
1、無(wú)m按實(shí)際位數(shù)輸出
2、有m輸出m位;超過(guò)m位,按實(shí)際位數(shù)輸出,不足補(bǔ)空格
3、有+(默認(rèn)為+)右對(duì)齊(左補(bǔ)空格)
4、有-左對(duì)齊(右補(bǔ)空格)
%(+)-mo
八進(jìn)制整數(shù)
%(+)-mx
十六進(jìn)制整數(shù)
%(+)-mu
無(wú)符號(hào)整數(shù)
%(+)-mld
long
unsigned
long
十進(jìn)制整數(shù)
%(+)-mlo
八進(jìn)制整數(shù)
%(+)-mlx
十六進(jìn)制整數(shù)
%(+)-mlu
無(wú)符號(hào)整數(shù)
%(+)-m.nf
float
double
十進(jìn)制小數(shù)
%(+)-m.ne
十進(jìn)制指數(shù)
%(+)-g
自動(dòng)選用%f和%e中較短的輸出寬度輸出單、雙精度浮點(diǎn)數(shù)
%(+)-mc
char
int
short
單個(gè)字符
1、無(wú)m輸出單個(gè)字符
2、有m輸出m位,補(bǔ)空格
3、有+(默認(rèn)為+)右對(duì)齊(左補(bǔ)空格)
4、有-左對(duì)齊(右補(bǔ)空格)
%(+)-m.ns
字符串
一串字符
1.無(wú)m、n按實(shí)際字符串輸出全部字符
2、有m、n僅輸出前n個(gè)字符,補(bǔ)空格
3.有+(默認(rèn)為+)右對(duì)齊(左補(bǔ)空格)
4、有-左對(duì)齊(右補(bǔ)空格)
二:格式輸入函數(shù)scanf()
1、
調(diào)用格式一般為:scanf("格式化控制字符串",地址表列);
2、格式化控制字符串和printf()函數(shù)含義相似,所不同的是它是對(duì)輸入格式進(jìn)行控制;
3、地址表列是有若干等待輸入的數(shù)據(jù)所對(duì)應(yīng)的內(nèi)存單元地址組成,由逗號(hào)隔開(kāi),一般形式為a,a為變量;
4、地址表列在數(shù)量和類型上和格式化控制字符串中的格式說(shuō)明符一一對(duì)應(yīng);
5、格式字符h表示輸入短型數(shù)據(jù),可用在d、o、x前面,m指定輸入數(shù)據(jù)所占寬度,
*表示對(duì)應(yīng)的數(shù)據(jù)項(xiàng)讀入后不賦給相應(yīng)的變量,更多格式說(shuō)明符及其組合如下
格式字符
數(shù)據(jù)對(duì)象
輸入形式
數(shù)據(jù)輸入方法
%md
int
short
unsigned
int
unsigned
short
十進(jìn)制整數(shù)
1、無(wú)m按實(shí)際位數(shù)輸入
2、有m輸入m位,不足m則跟回車(chē)鍵
%mo
八進(jìn)制整數(shù)
%mx
十六進(jìn)制整數(shù)
%mld
long
unsigned
long
十進(jìn)制整數(shù)
%mlo
八進(jìn)制整數(shù)
%mlx
十六進(jìn)制整數(shù)
%mlf
float
double
十進(jìn)制整數(shù)
%mle
%mc
char
單個(gè)字符
1、無(wú)m取單個(gè)字符
2、有m輸入m位,僅取第一個(gè)字符
%ms
字符串
一串字符
1、無(wú)m取回車(chē)或空格前若干字符
2、有m僅取前m字符
C
語(yǔ)言中,結(jié)構(gòu)體(struct)是一種數(shù)據(jù)結(jié)構(gòu),是C語(yǔ)言中聚合數(shù)據(jù)類型(aggregate data type)的一類。結(jié)構(gòu)體可以被聲明為變量、指針或數(shù)組等,用以實(shí)現(xiàn)較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
結(jié)構(gòu)體同時(shí)也是一些元素的集合,這些元素稱為結(jié)構(gòu)體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問(wèn)。
定義與聲明
結(jié)構(gòu)體的定義如下所示,struct為結(jié)構(gòu)體關(guān)鍵字,tag為結(jié)構(gòu)體的標(biāo)志,member-list為結(jié)構(gòu)體成員列表,其必須列出其所有成員;variable-list為此結(jié)構(gòu)體聲明的變量。
在實(shí)際應(yīng)用中,C語(yǔ)言結(jié)構(gòu)體數(shù)組常被用來(lái)表示一個(gè)擁有相同數(shù)據(jù)結(jié)構(gòu)的群體,比如一個(gè)班的學(xué)生、一個(gè)車(chē)間的職工等。
在C語(yǔ)言中,定義結(jié)構(gòu)體數(shù)組和定義結(jié)構(gòu)體變量的方式類似;
例:
struct stu{
char*name;//姓名
int num;//學(xué)號(hào)
int age;//年齡
char group;//所在小組
float score;//成績(jī)
}class[5];
表示一個(gè)班級(jí)有5個(gè)學(xué)生。
擴(kuò)展資料:
結(jié)構(gòu)體數(shù)組的引用與引用一個(gè)結(jié)構(gòu)體變量在原理上是一樣的。只不過(guò)結(jié)構(gòu)體數(shù)組中有多個(gè)結(jié)構(gòu)體變量,我們只需利用for循環(huán)一個(gè)一個(gè)地使用結(jié)構(gòu)體數(shù)組中的元素。
下面編寫(xiě)一個(gè)程序,編程要求:從鍵盤(pán)輸入5個(gè)學(xué)生的基本信息,如姓名、年齡、性別、學(xué)號(hào),然后將學(xué)號(hào)最大的學(xué)生的基本信息輸出到屏幕。
#includelt;stdio.hgt;
#includelt;string.hgt;
struct STU
{
char name[20];
int age;
char sex;
char num[20];
};
void OutputSTU(struct STU stu[5]);
//函數(shù)聲明,該函數(shù)的功能是輸出學(xué)號(hào)最大的學(xué)生信息
int main(void)
{
int i;
struct STU stu[5];
for(i=0;ilt;5;++i)
{
printf("請(qǐng)輸入第%d個(gè)學(xué)生的信息:",i+1);
scanf("%s%d%c%s",
stult;igt;.name,
stult;igt;
.age,stult;igt;
.sex,stult;
igt;.num);/*%c
前面要加空格,不然輸入時(shí)會(huì)將空格賦給%c*/
}
OutputSTU(stu);
return 0;
}
void OutputSTU(struct STU stu[5])
{
struct STU stumax=stu[0];
int j;
for(j=1;jlt;5;++j)
{
if(strcmp(stumax.num,stu[j]
.num)lt;0)//strcmp函數(shù)的使用
{
stumax=stu[j];
}
}
printf("學(xué)生姓名:%s學(xué)生年齡:%d學(xué)生性別:%c學(xué)生學(xué)號(hào):
%s\n",stumax.name,
stumax.age,stumax.
sex,stumax.num);
}
輸出結(jié)果是:
請(qǐng)輸入第1個(gè)學(xué)生的信息:小紅22 F Z1207031
請(qǐng)輸入第2個(gè)學(xué)生的信息:小明21 M Z1207035
請(qǐng)輸入第3個(gè)學(xué)生的信息:小七23 F Z1207022
請(qǐng)輸入第4個(gè)學(xué)生的信息:小欣20 F Z1207015
請(qǐng)輸入第5個(gè)學(xué)生的信息:小天19 M Z1207024
學(xué)生姓名:小明學(xué)生年齡:21學(xué)生性別:M學(xué)生學(xué)號(hào):Z1207035
參考資料:
百度百科——結(jié)構(gòu)體
在C語(yǔ)言中,有兩個(gè)函數(shù)可以在控制臺(tái)(顯示器)上輸出字符串,它們分別是:
puts():輸出字符串并自動(dòng)換行,該函數(shù)只能輸出字符串。
printf():通過(guò)格式控制符%s輸出字符串,不能自動(dòng)換行。除了字符串,printf() 還能輸出其他類型的數(shù)據(jù)。
這兩個(gè)函數(shù)相信大家已經(jīng)非常熟悉了,這里不妨再演示一下,請(qǐng)看下面的代碼:
#include stdio.h
int main(){
char str[] = "";
printf("%s\n", str);? //通過(guò)字符串名字輸出
printf("%s\n", "");? //直接輸出
puts(str);? //通過(guò)字符串名字輸出
puts("");? //直接輸出
return 0;
}
運(yùn)行結(jié)果:
注意,輸出字符串時(shí)只需要給出名字,不能帶后邊的[ ],例如,下面的兩種寫(xiě)法都是錯(cuò)誤的:
printf("%s\n", str[]);
puts(str[10]);
擴(kuò)展資料:
由數(shù)字、字母、下劃線組成的一串字符。一般記為 s=“a1a2···an”(n=0)。它是編程語(yǔ)言中表示文本的數(shù)據(jù)類型。在程序設(shè)計(jì)中,字符串(string)為符號(hào)或數(shù)值的一個(gè)連續(xù)序列,如符號(hào)串(一串字符)或二進(jìn)制數(shù)字串(一串二進(jìn)制數(shù)字)。
字符串在存儲(chǔ)上類似字符數(shù)組,它每一位單個(gè)元素都是能提取的,字符串的零位是它的長(zhǎng)度,如s[0]=10,這提供給我們很多方便,例如高精度運(yùn)算時(shí)每一位都能轉(zhuǎn)化為數(shù)字存入數(shù)組。
參考資料來(lái)源:百度百科-字符串
向字符數(shù)組c中輸入字符串,它是這樣存儲(chǔ)的:
將字符串中的第一個(gè)字符賦給字符數(shù)組的第一個(gè)元素c[0],第二個(gè)字符賦給第二個(gè)元素c[1],以此類推。
需要注意的是,當(dāng)給c[9]賦過(guò)值之后,如果在字符串中還有剩余的字符,程序會(huì)繼續(xù)命令指針從c[9]處繼續(xù)向后移動(dòng)一個(gè)存儲(chǔ)單元的長(zhǎng)度(在這里就是一個(gè)字節(jié)的長(zhǎng)度),并在讀入一個(gè)字符并賦給緊挨著c[9]的那個(gè)存儲(chǔ)單元,形象一點(diǎn)兒,把它叫做c[10],以此類推,直到讀完所輸入的字符串中的所有字符,并自動(dòng)加賦'\0'。
這種輸入方式一般也能運(yùn)行,但是這是十分危險(xiǎn)的。因?yàn)榫o挨在c[9]后面的單元中的內(nèi)容是不可預(yù)料的,它可能是一個(gè)空白的存儲(chǔ)空間,也可能已經(jīng)存放了一個(gè)十分有用的數(shù)據(jù)。如果存儲(chǔ)的是一個(gè)有用的數(shù)據(jù),越界輸入就會(huì)把越界部分原先已有的數(shù)據(jù)覆蓋掉。
在程序比較小的時(shí)候,由于空白地帶比較多,程序往往可以正常運(yùn)行,但是當(dāng)程序的規(guī)模很大的時(shí)候,一旦越界輸入,(越界部分)有用數(shù)據(jù)被覆蓋掉的可能性就很大了。
最好的方法就是使用scanf("%10s", c); 以限制向字符數(shù)組中輸入字符的個(gè)數(shù)。
#include
"stdio.h"
void
input(int
a[10])
//給一維數(shù)組輸入數(shù)據(jù)
{
int
i;
for(i=0;i10;i++)
scanf("%d",a[i]);
}
void
output(int
a[10])
//輸出一維數(shù)組輸入數(shù)據(jù)
{
int
i;
for(i=0;i10;i++)
printf("%d
",a[i]);
}
int
main()
{
int
b[10];
input(b);
//調(diào)用input函數(shù)給數(shù)組b賦值
output(b);//調(diào)用output函數(shù)輸出數(shù)組b中的值
}
2.putchar() getchar() 輸出輸入函數(shù)只針對(duì)單個(gè)字符的操作。3.puts(),gets() 輸出輸入函數(shù)可以單個(gè)字符操作(但是功能有限的),主要是針對(duì)字符串操作。 下面我們定義int a用scanf("%d",a)可以獲取整型a的值,a=getchar(),gets(a)無(wú)法從鍵盤(pán)獲取數(shù)字用printf("%d",a)可以打印數(shù)字a的值,putchar(a),puts(a)沒(méi)法打印數(shù)字方面:printf()和scanf()勝char a用scanf("%c",a) 可以獲取字符a的值,用a=getchar()能獲取a的值,用gets(a)不能獲取用printf("%c",a)可以打印字符a的值 用a=getchar()可以打印a的值,用puts(a)不能打印字符方面:getchar()和putchar()第1 scanf()和printf()第2 gets和puts()敗補(bǔ)充:puts()和gets()能接收和打印單個(gè)字符只限制變量是數(shù)組變量例如 char a[50]; gets(a); put(a);你輸入一個(gè)字符就會(huì)打印一個(gè)字符但如果是字符變量 char a='x'; char a; puts(a); 或 gets(a); puts(a);就無(wú)法運(yùn)行char a[50]用scanf("%s",a)能獲取數(shù)組a的值,用a=getchar()無(wú)法獲取,用gets(a)能獲取a的值用printf("%s",a)能打印數(shù)組a的值 用putchar(a)無(wú)法打印,用puts(a)能打印a的值字符串(數(shù)組)方面:gets()和puts()第一,scanf()和printf()第2,getchar()和putchar()敗可見(jiàn)scanf()和printf()什么都能實(shí)現(xiàn),但對(duì)字符和字符串操作沒(méi)有其他兩種好getchar()和putchar()對(duì)字符操作優(yōu)勢(shì)明顯,但不能操作數(shù)字變量,字符數(shù)組變量gets()和puts()對(duì)字符串操作優(yōu)勢(shì)明顯,但也不能操作數(shù)字變量,字符變量scanf()和printf()格式輸入輸出能同時(shí)按格式一起輸入輸出字符,數(shù)字,字符串這是其他兩種不能比的所以程序以scanf()和printf()為主,其他兩種作為輔助,發(fā)揮各自的長(zhǎng)處。最后來(lái)個(gè)總結(jié),用程序表示#include stdio.hmain(){ char a,b[50]; printf("請(qǐng)輸入第一個(gè)字符:\n"); scanf(" %c",a); getchar(); //獲取前面的回車(chē) printf("第一個(gè)的字符為:%c\n",a); printf("請(qǐng)輸入第二個(gè)字符:\n"); a=getchar(); printf("第二個(gè)字符為:"); putchar(a); putchar('\n'); printf("請(qǐng)輸入第一個(gè)字符串:\n"); scanf(" %s",b); getchar(); //獲取前面的回車(chē) printf("第一個(gè)的字符為:%s\n",b); puts("請(qǐng)輸入第二個(gè)字符串:"); gets(b); puts("第二個(gè)字符串為:"); puts(b); }