用c语言从dat文件中搜索数据
下面的程序创建一个新的dat文件并存储随机数据。然后从文件中搜索其中一个值并打印 问题是最多搜索13项数据,程序退出。如下图所示,存储了100个输入,只搜索了13个项目。解决办法是什么用c语言从dat文件中搜索数据,c,C,下面的程序创建一个新的dat文件并存储随机数据。然后从文件中搜索其中一个值并打印 问题是最多搜索13项数据,程序退出。如下图所示,存储了100个输入,只搜索了13个项目。解决办法是什么 // database for storing random values in file and making search operation #include <stdio.h> #include <string.h> #include <stdlib.h> typ
// database for storing random values in file and making search operation
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
int rollNo;
int regdNo;
int salary;
int status;
} record;
int main(void) {
int i, n;
record det;
int recordsize = sizeof(det); // size of record
FILE *fp1 = fopen("random.dat", "a+");
if (fp1 == NULL) {
printf("error in opening file : \n");
return 1;
}
printf("enter the no of data to be stored\n");
scanf("%d", &n);
for (i = 0; i < n; i++) {
det.rollNo = rand();
det.regdNo = rand();
det.salary = rand();
det.status = (rand() % 10) + 1;
fwrite(&det, recordsize, 1, fp1);
}
printf("The last roll no of student stored in list: %d\n", det.rollNo);
int stat = 0, countNumber = 0;
record buffer;
int number;
printf("enter the roll number to be searched\n");
scanf("%d", &number);
fseek(fp1, 0, SEEK_SET); // move file position indicator to beginning of file
do {
countNumber++; // counts number of times the file is searched
fread(&buffer, recordsize, 1, fp1);
if (buffer.rollNo == number) {
stat = 1;
break;
}
} while (!feof(fp1));
printf("\n");
if (stat) {
printf("succesfully found at %d\n", countNumber);
printf(" roll number %d\n regd number %d\n salary %d\n status %d\n",
buffer.rollNo, buffer.regdNo, buffer.salary, buffer.status);
} else
printf("there is no such roll number %d in the list\nlength of list : %d\n",
number, countNumber);
fclose(fp1);
}
//用于在文件中存储随机值并进行搜索操作的数据库
#包括
#包括
#包括
类型定义结构{
int-rollNo;
内特雷格德诺;
国际工资;
智力状态;
}记录;
内部主(空){
inti,n;
记录数据;
int recordsize=sizeof(det);//记录大小
文件*fp1=fopen(“random.dat”,“a+”);
如果(fp1==NULL){
printf(“打开文件时出错:\n”);
返回1;
}
printf(“输入要存储的数据编号\n”);
scanf(“%d”和“&n”);
对于(i=0;i
输出为:
您的主要问题是,您将二进制数据存储在系统希望您存储文本的位置
;打开一个文件进行文本读取,但在其中存储二进制数据fopen(…,“a+”)
- 您不使用feof的
- 主函数不返回值
- 不测试
或n
的值number
// database for storing random values in file and making search operation
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
int rollNo;
int regdNo;
int salary;
int status;
} record;
int main(void) {
int i, n;
record det;
/* open the file in BINARY mode */
FILE* fp1 = fopen("random.dat" , "a+b");
if (fp1 == NULL) {
printf("error in opening file : \n");
return 1;
}
printf("enter the no of data to be stored\n");
scanf("%d", &n);
for (i = 0; i < n; i++) {
det.rollNo = rand();
det.regdNo = rand();
det.salary = rand();
det.status = (rand() % 10) + 1;
if (1 != fwrite(&det, sizeof det, 1, fp1)) {
perror("fwrite");
return 2;
}
}
printf("The last roll no of student stored in list: %d\n", det.rollNo);
int stat = 0, countNumber = 0;
record buffer;
int number;
printf("enter the roll number to be searched\n");
scanf("%d", &number);
fseek(fp1, 0, SEEK_SET); // rewind would have done the job
while (1) {
countNumber++; // counts number of times the file is searched
if (1 != fread(&buffer, sizeof buffer, 1, fp1)) {
perror("fread");
return 3;
}
if (buffer.rollNo == number) {
stat = 1;
break;
}
}
printf("\n");
if (stat) {
printf("succesfully found at %d\n", countNumber);
printf(" roll number %d\n regd number %d\n salary %d\n status %d\n", buffer.rollNo, buffer.regdNo, buffer.salary, buffer.status);
}
else
printf("there is no such roll number %d in the list\nlength of list : %d\n", number, countNumber);
/* warning: file is not closed in case of error... */
fclose(fp1);
return 0;
}
//用于在文件中存储随机值并进行搜索操作的数据库
#包括
#包括
#包括
类型定义结构
{
int-rollNo;
内特雷格德诺;
国际工资;
智力状态;
}记录;
内部主(空){
inti,n;
记录数据;
/*以二进制模式打开文件*/
文件*fp1=fopen(“random.dat”,“a+b”);
如果(fp1==NULL){
printf(“打开文件时出错:\n”);
返回1;
}
printf(“输入要存储的数据编号\n”);
scanf(“%d”和“&n”);
对于(i=0;i
您的主要问题是,您将二进制数据存储在系统希望您存储文本的位置
;打开一个文件进行文本读取,但在其中存储二进制数据fopen(…,“a+”)
- 您不使用feof的
- 主函数不返回值
- 不测试
或n
的值number
// database for storing random values in file and making search operation
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
int rollNo;
int regdNo;
int salary;
int status;
} record;
int main(void) {
int i, n;
record det;
/* open the file in BINARY mode */
FILE* fp1 = fopen("random.dat" , "a+b");
if (fp1 == NULL) {
printf("error in opening file : \n");
return 1;
}
printf("enter the no of data to be stored\n");
scanf("%d", &n);
for (i = 0; i < n; i++) {
det.rollNo = rand();
det.regdNo = rand();
det.salary = rand();
det.status = (rand() % 10) + 1;
if (1 != fwrite(&det, sizeof det, 1, fp1)) {
perror("fwrite");
return 2;
}
}
printf("The last roll no of student stored in list: %d\n", det.rollNo);
int stat = 0, countNumber = 0;
record buffer;
int number;
printf("enter the roll number to be searched\n");
scanf("%d", &number);
fseek(fp1, 0, SEEK_SET); // rewind would have done the job
while (1) {
countNumber++; // counts number of times the file is searched
if (1 != fread(&buffer, sizeof buffer, 1, fp1)) {
perror("fread");
return 3;
}
if (buffer.rollNo == number) {
stat = 1;
break;
}
}
printf("\n");
if (stat) {
printf("succesfully found at %d\n", countNumber);
printf(" roll number %d\n regd number %d\n salary %d\n status %d\n", buffer.rollNo, buffer.regdNo, buffer.salary, buffer.status);
}
else
printf("there is no such roll number %d in the list\nlength of list : %d\n", number, countNumber);
/* warning: file is not closed in case of error... */
fclose(fp1);
return 0;
}
//用于在文件中存储随机值并进行搜索操作的数据库
#包括
#包括
#包括
类型定义结构
{
int-rollNo;
内特雷格德诺;
国际工资;
智力状态;
}记录;
内部主(空){
inti,n;
记录数据;
/*以二进制模式打开文件*/
文件*fp1=fopen(“random.dat”,“a+b”);
如果(fp1==NULL){
printf(“打开文件时出错:\n”);
返回1;
}
printf(“输入要存储的数据编号\n”);
scanf(“%d”和“&n”);
对于(i=0;i