問題一,那是逗號(hào)表達(dá)式,括號(hào)內(nèi)依次運(yùn)算,取最后的值為結(jié)果,所以是3而不是1,這個(gè)是定義了的,沒有為什么,記住就好;問題二,3%5是3,因?yàn)檫@是取余運(yùn)算,就是簡單的取余數(shù),不用想的很復(fù)雜,和除法有區(qū)別!、
10年積累的成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有合肥免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
空格不算是空字符串,str=""這樣的才算是空字符串,里面什么都沒有,而str=" "是有內(nèi)容了,這個(gè)str存儲(chǔ)了一個(gè)字符(空格),如果你要把空格也算是空字符串,那么要稍作修改:
char str[] = " ";
int len = strlen(str), i = 0;
if (len 0)
{
while(i len str[i++] == ' ');
if (i len) // 字符串不空
else // 空字符串
}
void的意思是函數(shù)沒有可用的返回值,函數(shù)本身的return返回語句也不帶表達(dá)式
比如,你不想主函數(shù)有返回值時(shí),可以寫:
void?main()?{
return;?//或者可以省略這句
}
#includestdio.h
#includestdlib.h
typedef struct
{
int arr[100];
int last;
}SeqList;
void InitList(SeqList *L);
void IsEmpty(SeqList L);
int GetLength(SeqList L);
void DeletNum(SeqList * L,int num);
void GetEmpty(SeqList * L);
void PaiXu(SeqList * L);
int main()
{
int length,addr,num;
SeqList L,*p;
p=L;
printf("創(chuàng)建表\n");
InitList(L);//初始化
IsEmpty(L);//判斷是否為空
printf("input the length\n");
scanf("%d",length);
L.last=length-1;//數(shù)組最后下個(gè)數(shù)的下標(biāo)
printf("輸入表中的值\n");//輸入表中的值
for(int i=0;i=L.last;i++)
scanf("%d",L.arr[i]);
length=GetLength(L);
printf("輸入想輸出的數(shù)在表中的位置(從1開始數(shù))\n");//輸出某個(gè)位序上的數(shù)據(jù)元素
scanf("%d",addr);
if(addrlength)
printf("該位置不存在,超過了范圍\n");
else
printf("第%d數(shù)為%d\n",addr,L.arr[addr-1]);
printf("輸入想得到前驅(qū)后繼的結(jié)點(diǎn)的值\n");//輸出某元素的前驅(qū)后繼
scanf("%d",num);
for(i=0;i=L.last;i++)
{
if(L.arr[i]==num)
{
printf("找到該結(jié)點(diǎn),結(jié)點(diǎn)的位置為第%d數(shù)\n",i+1);
if((i+1)==length)
printf("該結(jié)點(diǎn)無后繼\n");
else
printf("結(jié)點(diǎn)后繼為%d\n",L.arr[i+1]);
if((i-1)0)
printf("該結(jié)點(diǎn)無前驅(qū)\n");
else
printf("結(jié)點(diǎn)前驅(qū)為%d\n",L.arr[i-1]);
break;
}
}
if(i==length)
printf("表中無此數(shù)\n");
//將奇偶排序
PaiXu(L);
printf("輸入想要?jiǎng)h除的數(shù)\n");
scanf("%d",num);
DeletNum(p,num);//刪除該數(shù)
GetLength(L);//刪除后的表長
GetEmpty(L);//置空
IsEmpty(L);//判斷是否為空
return 0;
}
void InitList(SeqList * L)
{
L-last=-1;
}
void IsEmpty(SeqList L)
{
if(L.last=0)
printf("該表不為空\n");
else
printf("該表為空\n");
}
int GetLength(SeqList L)
{
printf("該表的長度為%d\n",L.last+1);
return L.last+1;
}
void DeletNum(SeqList * L,int num)
{
int i,k;
for(i=0;i=L-last;i++)
{
if(L-arr[i]==num)
{
k=i;
break;
}
}
if(i==L-last+1)
printf("表中無此數(shù)\n");
for(i=k;iL-last;i++)//刪除該數(shù)后,后面的數(shù)向前移
L-arr[i]=L-arr[i+1];
L-last--;//表長減一
for(i=0;i=L-last;i++)
printf("%d ",L-arr[i]);
}
void GetEmpty(SeqList * L)
{
L-last=-1;
}
void PaiXu(SeqList * L)
{
int i,j,t;
i=0;
j=L-last;
while(ij)
{
while(L-arr[i]%2!=0)
i++;
while(L-arr[j]%2==0)
j--;
if(ij)
{
t=L-arr[i];
L-arr[i]=L-arr[j];
L-arr[j]=t;
}
}
printf("奇偶排序后\n");
for(i=0;i=L-last;i++)
printf("%d ",L-arr[i]);
}
有兩個(gè)地方錯(cuò)誤
1:IsEmpty函數(shù)中是空返回真,非空返回假,你寫反了
int?IsEmpty(LinkQueue?*Q)
{
if(Q-front==Q-rear)
return(TRUE);////////////
else??return(FALSE);/////////////
}
2:GetHead函數(shù)中*x=Q-front-next-data;因?yàn)镼-front只是頭指針,不保存數(shù)據(jù)
int?GetHead(LinkQueue?*Q,int?*x)
{
if(!IsEmpty(Q))
{
*x=Q-front-next-data;///////////////
return(TRUE);
}
else?return(FALSE);
}
一個(gè)文件內(nèi)的內(nèi)容加載到內(nèi)存之后是連續(xù)存儲(chǔ)的。(至少這種小文件,不超過4KB的)
如果想達(dá)到刪除一行的效果。至少有三種辦法可以實(shí)現(xiàn)
一、最簡單的辦法,建議讀到鏈表里,刪除其中一個(gè)節(jié)點(diǎn)。然后再覆蓋寫回到文件。
二、找到要?jiǎng)h除的位置,fseek到該位置,將之后需要保留的文件內(nèi)容,從這里開始寫。
三、利用內(nèi)存映射,將文件映射到內(nèi)存,直接對(duì)內(nèi)存修改,但是對(duì)內(nèi)存修改,也是需要類似于方法2,將需要保留的內(nèi)容重新移動(dòng)位置。
綜上,方法一最簡單。