網上找到一段代碼,想改成自己的,老是有bug,求大神幫忙解決一下。
已經存在一個表了,想法是往表裡加入一行,加到最後一行就行;另外,如果是要刪除某一行的話,以第一列的學號為關鍵字,應該怎麼寫?
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <Windows.h>
struct Student //定義基本表——Student
{
long long int Sno; //學生學號
char Sname[20]; //學生姓名
char Ssex[6]; //學生性別
int Sage; //學生年齡
char Sdept[20]; //學生所在系
};
int main()
{
FILE *fp;
char name[20]; //輸入變量
int sum; //輸入變量
char fName[10][20]; //可存儲10個人名
int fScore[10]; //存儲10個分數記錄
char buff1[20];
char buff2[20];
int i=0;
//打開存儲文件
if ((fp=fopen("StudentData.txt","r"))==NULL)
{
printf("Can not open the file");
getch();
exit(0);
}
else
{
while (!feof(fp))
{
ZeroMemory(buff1,sizeof(buff1)); //清空內存
ZeroMemory(buff2,sizeof(buff1));
fgets(buff1,sizeof(buff1),fp); //讀取名稱
fgets(buff2,sizeof(buff2),fp); //讀取第二行分數
if (strcmp(buff1,"")==0)
{
continue;
}
else
{
strcpy(fName[i],buff1);
printf("%s",fName[i]); //輸出名稱
fScore[i] = atoi(buff2); //將字符型轉換成int型
printf("%i\n",fScore[i]); //打印輸出分數值
}
i++;
}
}
fclose(fp);
//打開存儲文件,將排好序的數據重新寫入文件中
if ((fp=fopen("c:\\scorelist.txt","w"))==NULL)
{
printf("Can not open the file");
getch();
exit(0);
}
else
{
printf("Input the new name:\n");
scanf("%s",name);
printf("Input the new score:\n");
scanf("%i",&sum);
int j =0;
//獲取新增積分排序位置
while(sum < fScore[j])
{
j++;
}
//移動數據重新對數組排序,從後往前排序
int m = i;
while (i>j)
{
strcpy(fName[i],fName[i-1]);
fScore[i] = fScore[i-1];
i--;
}
strcpy(fName[j],name);
strcat(fName[j],"\n");
fScore[j] = sum;
//寫入文本文件
int k=0;
while(k<=m)
{
fputs(fName[k],fp);
fprintf(fp,"%i\n",fScore[k]);
k++;
}
}
fclose(fp);
}
這是txt文件裡的內容。
2014010624 艾倫 男 19 IS
2014010413 郭寧 男 20 EN
2014010908 王凱 男 19 IS
2014021111 劉莉 女 19 EN
2014011536 陳軍 男 21 IS
2014021314 趙爽 女 18 CA
2014010715 李寧 女 22 IS
2014010245 喬治 男 21 EN
2014021212 張雪 女 19 IS
2014021629 孫楠 男 23 CA
2014012231 馬丁 男 20 CA
建議使用C++的文件IO流來讀取文件,然後使用string的字符串查找方法string::find(char[])來查找學號相同的信息
例如:
int main()
{
//以讀取流打開StudentData.txt文件
ifstream in("StudentData.txt");
string line;
string::size_type pos; // find()方法的返回值是 size_type 類型的
vector StudentDataVector; //申請一個string容器將數據保存起來
while(getline(in, line))
{
pos = line.find("2014011536",0);
if(pos < line.size())
{
//找到("2014011536")需要刪除的不作處理
}
else
{
StudentDataVector.push_back(line); //將需要保留的數據裝入容器中
}
}
//數據處理完成後關閉文件讀取流
in.close();
//然後以寫入流打開StudentData.txt文件
ofstream out("StudentData.txt");
//用一個for循環將剛才保存的數據重新寫入文件
for(int i = 0 ; i < StudentDataVector.size() ; i++)
{
out << StudentDataVector[i];
}
//寫入完成後關閉文件寫入流
out.close();
return 0;
}