void del()
成都創(chuàng)新互聯(lián)公司是一家專注于網(wǎng)站設(shè)計(jì)、網(wǎng)站制作與策劃設(shè)計(jì),云安網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:云安等地區(qū)。云安做網(wǎng)站價(jià)格咨詢:18980820575
{
STU a[20]; char tname[20];
int i=0,j,n=0;
FILE *fp;
printf("\t\t\t請(qǐng)輸入要?jiǎng)h除的姓名:");
scanf("%s",tname);
/*****以下內(nèi)容是讀取文件信息,并將文件中的信息與用戶輸入的姓名做比較,如果姓名相同,則刪除該學(xué)生信息***/
if((fp=fopen("e:\\file1","rb"))==NULL) //打開文件file1
{printf("error!\n");exit(0);} //打開失敗,報(bào)錯(cuò)并退出系統(tǒng)
while(fread(a[n],sizeof(STU),1,fp)!=0) //打開成功,每次從文件中讀入一個(gè)STU結(jié)構(gòu)大小的數(shù)據(jù),并將其存入數(shù)組a[]中。直到文件內(nèi)容結(jié)束。
n++;
/**該循環(huán)用于查找**/
for(i=0;in;i++)
if(strcmp(a[i].name,tname)==0) break; //找到姓名相同的學(xué)生了,結(jié)束循環(huán)。
if(i==n) //找完一遍,沒找到
{ printf("\t\t\t沒有找到!\n");
fclose(fp); //關(guān)閉文件file1
}
else //找到了同姓名的學(xué)生
{
/**該循環(huán)用于刪除該學(xué)生信息**/
for(j=i;jn-1;j++) //從找到該學(xué)生的位置開始,依次把后面的數(shù)據(jù)前移,覆蓋掉前一個(gè)
{
a[j]=a[j+1];
}
n=n-1; //學(xué)生總數(shù)減1
/****以下內(nèi)容是更新文件,并提示用戶刪除成功****/
if((fp=fopen("e:\\file1","wb"))==NULL) //再次打開文件file1,把刪除之后的信息保存到文件中
{printf("error!\n");exit(0);}
fwrite(a,sizeof(STU),n,fp); //每次往文件中寫入一個(gè)學(xué)生的信息(即一個(gè)STU大?。?/p>
fclose(fp);
printf("\t\t\t刪除成功!\n");
system("pause"); //頁面顯示諸如“按任意鍵繼續(xù)……”
}
}
1. 函數(shù)開始的時(shí)候這兩句話沒有意義
p=(stud *)malloc(sizeof(stud));
q=(stud *)malloc(sizeof(stud));
你只是用了這兩個(gè)指針,為它們分配空間一是沒必要,二是內(nèi)存會(huì)泄露
2. 看你的代碼應(yīng)該是有頭結(jié)點(diǎn)的鏈表,搜索的時(shí)候p=head;p初始化為了head,指向了頭結(jié)點(diǎn),搜索的時(shí)候應(yīng)該從p-next開始,而你用的while((p!=NULL)(strcmp(p-name,N)!=0)),應(yīng)該用p-next!=NULL。而且后面刪除的時(shí)候也刪除的是p-next,所以比較的話也應(yīng)該用p-next:strcmp(p-next-name,N)
樓主的意思是在str1中刪除str2中出現(xiàn)的字符?那么改成:
#includestdio.h
void main ()
{
char str1[9]={'t','i','n','m','f','g','y','f','s'};
char str2[3]={'A','s','g'};
int i,k,l;
for(i=0;i9;i++)
{
l=0;
for(k=0;k3;k++)
{
if (str1[i]=str2[k])
{l=1;break;}
}
if l!=1
printf("%c",str1[i]);
}
}