//打开文件写入数据
FILE *file = fopen("data.txt","w");//a追加写
//无法打开文件
if(file==NULL)
{
return 1;
}
//一行一行输入数据
for(i=0;i<t;i++)
{
//输入单case数据并临时存到digs
scanf("%d",&n);
for(j=0;j<n;j++)
{
scanf("%d",&digs[j]);
fprintf(file,"%d ",digs[j]);
}
fprintf(file,"\n");//一个case一行
}
// 关闭文件
fclose(file);
// 重新打开文件以读取数据并进行操作
file = fopen("data.txt", "r");
if (file == NULL) {
printf("无法打开文件。\n");
return 1;
}
// 逐行读取数据并进行操作
i = 0;//循环n
//读取t行
while(fgets(line,sizeof(line),file)!=NULL)//单个样例:逐行读取,循环体内是读取一行后的操作
{
//打印读取结果
printf("读取:%s",line);
//使用空格分隔字符串
char *token = strtok(line," ");
while(token != NULL)//指针不为空,也就是指向数据
{
//将字符串转换为整数并存入数组
//每一行一个数一个数的村、存
digs[i++]=atoi(token);
token = strtok(NULL," ");//把strtok执行后返回的下一个字符的首地址(指针)赋值给token,实现了指针的后移
}
//读完了,存完了,进行操作
}
结果
输入4行数据,成功写入data.txt
但是读取的时候最后一行没有换行符,没有被读取
修正
//打开文件写入数据
FILE *file = fopen("data.txt","w");//a追加写
//无法打开文件
if(file==NULL)
{
return 1;
}
//一行一行输入数据
for(i=0;i<t;i++)
{
//输入单case数据并临时存到digs
scanf("%d",&n);
for(j=0;j<n;j++)
{
scanf("%d",&digs[j]);
fprintf(file,"%d ",digs[j]);
}
fprintf(file,"\n");//一个case一行
}
// 关闭文件
fclose(file);
// 重新打开文件以读取数据并进行操作
file = fopen("data.txt", "r");
if (file == NULL) {
printf("无法打开文件。\n");
return 1;
}
// 逐行读取数据并进行操作
int sampleIndex = 0; // 用于追踪每个样例内的索引
while(fgets(line,sizeof(line),file)!=NULL)//单个样例:逐行读取,循环体内是读取一行后的操作
{
printf("读取:%s",line);
// 检查是否读取到有效字符
if (strlen(line) == 0) {
break; // 退出循环,避免重复读取最后一行
}
//使用空格分隔字符串
char *token = strtok(line," ");
while(token != NULL)//指针不为空,也就是指向数据
{
//将字符串转换为整数并存入数组
//每一行一个数一个数的村、存
digs[sampleIndex++]=atoi(token);
token = strtok(NULL," ");//把strtok执行后返回的下一个字符的首地址(指针)赋值给token,实现了指针的后移
}
// 如果已经读取了一个样例的数据,重置索引
if (sampleIndex >= n)
{
sampleIndex = 0;
//每个样例要算n个result
//调用product进行累乘并返回result存到数组res[j]
for(j=0;j<n;j++)//每个样例要算n个result
{
res[j] = Product(digs,n,j);//传值调用
//j+1 是有效的函数参数
//传入j是为了对应add的操作对象
}
//算完了,排序查找最大值
//调用Maxres对数组res进行排序查找并返回最大值maxres(传地址调用)
maxres = MaxRes(res,n);//传值
printf("%d\n",maxres);
}
}
// 关闭文件
fclose(file);
return 0;
}