在scanf中不要用\n.
十載的北海街道網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整北海街道建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“北海街道網(wǎng)站設(shè)計(jì)”,“北海街道網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
如果要忽略一個(gè)字符.
可以
getchar();
scanf("%c", C);另外
要傳給主函數(shù),
需要指針,
或者用
返回值
.
即
void info (char *C)
{
getchar();
scanf("%c", C);
}調(diào)用的時(shí)候
info (A);
info (B);
1、char類(lèi)型,也就是常說(shuō)字符類(lèi)型。char類(lèi)型和其它類(lèi)型一樣在定義和初始化上可以先聲明(定義),再賦值(初始化)。使用char來(lái)定義一個(gè)字符,通過(guò)單引號(hào)括起來(lái)的單個(gè)字符賦值給它。
2、當(dāng)然你也可以在定義變量的時(shí)候就初始化(也就是在聲明的時(shí)候賦值)。
3、注意字符并不意味著字母,單引號(hào)括起來(lái)的單個(gè)字符。所謂單個(gè)字符可以是數(shù)字、中文之類(lèi)的。
4、字符類(lèi)型可以自動(dòng)轉(zhuǎn)化為存儲(chǔ)空間比它大的int類(lèi)型。例如下面的例子,c是字符,把它賦值int類(lèi)型的i1時(shí),卻不報(bào)錯(cuò)就是因?yàn)樽詣?dòng)轉(zhuǎn)化。
5、int轉(zhuǎn)化為字類(lèi)型時(shí)(這種是屬于存儲(chǔ)空間由大向小的轉(zhuǎn)化),則需要強(qiáng)轉(zhuǎn)。
6、加了強(qiáng)制轉(zhuǎn)換這后,它就不報(bào)錯(cuò)了。
指針就是指向內(nèi)存的某個(gè)地址的一個(gè)變量。
結(jié)構(gòu)體指針就是這個(gè)指針變量的值必須指向存放該結(jié)構(gòu)體的內(nèi)存位置。
當(dāng)這個(gè)指針沒(méi)有任何指向時(shí),可以賦值為null值,但是改指針不可使用,程序中應(yīng)該做判斷。下面是一些賦值演示。
struct student{
int id;
int score;
} aaa;
struct student *p = null;//結(jié)構(gòu)體指針p初始化賦值為null
struct student *p2=aaa;//p2指向aaa
struct student *p3=(struct student *)malloc(sizeof(struct student));//內(nèi)存中申請(qǐng)一個(gè)結(jié)構(gòu)體空間,并將地址強(qiáng)制轉(zhuǎn)換為結(jié)構(gòu)體指針變量賦值給p3
n = scanf("%d",n);
這一句有問(wèn)題
1. scanf 函數(shù)是有返回值的,它的返回值可以分成三種情況
1) 正整數(shù),表示正確輸入?yún)?shù)的個(gè)數(shù)。
例如執(zhí)行 scanf(“%d %d”, a, b);
如果用戶(hù)輸入”3 4”,可以正確輸入,返回2(正確輸入了兩個(gè)變量);
如果用戶(hù)輸入”3,4”,可以正確輸入a,無(wú)法輸入b,返回1(正確輸入了一個(gè)變量)。
2) 0,表示用戶(hù)的輸入不匹配,無(wú)法正確輸入任何值。如上例,用戶(hù)如果輸入”,3 4”,返回0。
3) EOF,這是在 stdio.h 里面定義的常量(通常值為-1),表示輸入流已經(jīng)結(jié)束。在Windows下,用戶(hù)按下CTRL+Z(會(huì)看到一個(gè)^Z字符)再按下回車(chē)(可能需要重復(fù)2次),就表示輸入結(jié)束;Linux/Unix下使用CTRL+D表示輸入結(jié)束。
你這個(gè)輸入一個(gè)返回值就是1,因此n也會(huì)一直等于一
#includestdio.h
#includestdlib.h
int assignment(int *,int);
void print(int *,int);
void main()
{
int sz,rt;
int *p; //定義一個(gè)指針,在子函數(shù)里再動(dòng)態(tài)分配內(nèi)存
printf("輸入data的數(shù)據(jù)元素個(gè)數(shù):");
scanf("%d",sz);
rt=assignment(p,sz); //調(diào)用賦值函數(shù)
printf("數(shù)組最后元素為:%d\n",rt);
}
int assignment(int data[],int size) //按 Fibonacci 數(shù)列對(duì)數(shù)組元素依次賦值
{
int res;
data=(int *)malloc(size*sizeof(int));
if(size==1)
data[0]=1;
else if(size==2)
{
data[0]=1;
data[1]=1;
}
else
{
data[0]=1;
data[1]=1;
for(int i=2;isize;i++)
data[i]=data[i-1]+data[i-2];
}
print(data,size); //調(diào)用打印函數(shù)
res=data[size-1]; //最后一個(gè)元素是data[size-1]
free(data); //釋放內(nèi)存
return res;
}
void print(int data[],int size) //打印數(shù)組
{
for(int i=0;isize;i++)
printf("%d ",data[i]);
}
有注釋的,不明白的再討論
結(jié)構(gòu)體數(shù)組指針作為函數(shù)參數(shù),通過(guò)數(shù)組的首地址與偏移量對(duì)結(jié)構(gòu)體數(shù)組進(jìn)行scanf的賦值,在函數(shù)中通過(guò)指針間接訪(fǎng)問(wèn)到其指向的內(nèi)存。
舉例:編寫(xiě)函數(shù),輸入5個(gè)學(xué)號(hào)(int),5個(gè)姓名(字符串),5個(gè)成績(jī)數(shù)組(每組三個(gè)成績(jī))(int[3]),依次調(diào)用函數(shù)
#include stdio.h
#include stdlib.h
struct student? //建立結(jié)構(gòu)體,學(xué)號(hào),姓名,3門(mén)課的分?jǐn)?shù)
{
int num;
char name[10];
int score[3];
}Stu[5];? ? ? ? ? //初始化,一共5個(gè)學(xué)生的數(shù)據(jù)
void getScore(struct student * p)? //函數(shù):向結(jié)構(gòu)體讀取分?jǐn)?shù),一共三門(mén)課
{
int i, j;
for (i = 0; i 5; i++)
for (j = 0; j 3; j++)
scanf_s("%d", ((p+i)-score[j]));
}
void getNum(struct student * p)? //函數(shù):向結(jié)構(gòu)體讀取學(xué)號(hào)
{
int i;
for (i = 0; i 5;i++)
scanf_s("%d", (p + i)-num);
}
void getName(struct student * p)? //函數(shù):向結(jié)構(gòu)體讀取姓名
{
int i;
for (i = 0; i 5; i++)
scanf("%s", (p + i)-name);
}
int main()
{
int i, j, average[3] = { 0 };? ?//average數(shù)組儲(chǔ)存每門(mén)課的平均分
getNum(Stu);? ? ? ? ? ? //函數(shù)調(diào)用
getName(Stu);
getScore(Stu);
for (j = 0; j 3; j++)
{
for (i = 0; i 5; i++)
average[j] += Stu[i].score[j];
}
for (i = 0; i 5; i++)
{
printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name);? //依次打印學(xué)號(hào) 姓名
//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);
for (j = 0; j 3; j++)? ? //打印三門(mén)課的分?jǐn)?shù)
printf(" %d", Stu[i].score[j]);
printf("\n");
}
printf("average:");
for (i = 0; i 3; i++)
printf("%f ", (float)average[i]/5);? ?//打印三門(mén)課平均分
printf("\n");
system("pause");
return 0;
}
如:
scanf("%c%c%c",a,b,c);
輸入為:
d e f
則把'd'賦予a, ' '(空格)賦予b,'e'賦予c。因?yàn)?c 只要求讀入一個(gè)字符,后面不需要用空格作為兩個(gè)字符的間隔,因此把' '作為下一個(gè)字符送給b。
只有當(dāng)輸入為:def(字符間無(wú)空格) 時(shí),才能把'd'賦于a,'e'賦予b,'f'賦予c。
擴(kuò)展資料:
1、函數(shù)原型
int scanf(const char * restrict format,...);
函數(shù) scanf() 是從標(biāo)準(zhǔn)輸入流stdin [1]? (標(biāo)準(zhǔn)輸入設(shè)備,一般指向鍵盤(pán))中讀內(nèi)容的通用子程序,可以說(shuō)明的格式讀入多個(gè)字符,并保存在對(duì)應(yīng)地址的變量中。
函數(shù)的第一個(gè)參數(shù)是格式字符串,它指定了輸入的格式,并按照格式說(shuō)明符解析輸入對(duì)應(yīng)位置的信息并存儲(chǔ)于可變參數(shù)列表中對(duì)應(yīng)的指針?biāo)肝恢?。每一個(gè)指針要求非空,并且與字符串中的格式符一一順次對(duì)應(yīng)。
2、返回值
scanf函數(shù)返回成功讀入的數(shù)據(jù)項(xiàng)數(shù),讀入數(shù)據(jù)時(shí)遇到了“文件結(jié)束”則返回EOF。如:
scanf("%d %d",a,b);函數(shù)返回值為int型。如果a和b都被成功讀入,那么scanf的返回值就是2;
如果只有a被成功讀入,返回值為1;如果a和b都未被成功讀入,返回值為0;如果遇到錯(cuò)誤或遇到end of file,返回值為EOF。end of file為Ctrl+z 或者Ctrl+d。
例:使用scanf函數(shù)輸入數(shù)據(jù)。
#include stdio.h
int main(void)
{
int a,b,c;
printf("Give me the value of a,b,c seperated with whitespaces:\n");
scanf("%d%d%d",a,b,c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;
}
注意:a,b,c中的是尋址操作符,a表示對(duì)象a在內(nèi)存中的地址,是一個(gè)右值。變量a,b,c的地址是在編譯階段分配的(存儲(chǔ)順序由編譯器決定)。
如果scanf中%d是連著寫(xiě)的如“%d%d%d”,在輸入數(shù)據(jù)時(shí),數(shù)據(jù)之間不可以用逗號(hào)分隔,只能用空白字符(空格或tab鍵或者回車(chē)鍵)分隔——“2 (空格)3(tab) 4” 或 “2(tab)3(回車(chē))4”等。若是“%d,%d,%d”,則在輸入數(shù)據(jù)時(shí)需要加“,”,如“2,3,4”。
參考資料:
百度百科——scanf(計(jì)算機(jī)語(yǔ)言函數(shù))
網(wǎng)站欄目:c語(yǔ)言如何給函數(shù)賦值 c語(yǔ)言怎么給函數(shù)賦值
轉(zhuǎn)載注明:http://jinyejixie.com/article44/dosshee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、Google、定制網(wǎng)站、、網(wǎng)站改版、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)