如何仅保存与我的 varunummer 搜索相匹配的一个或多个项目?此功能有效,但如果我的数组有限并保存文件,则之前保存的项目会消失,并且仅保存搜索到的项目。另外,如何增加 nrOfGoods
与匹配的元素数量? PS:nrOfGoods
跟踪数组中的项目数量。这是我到目前为止得到的:
struct varor{
int varunummer;
char namn[WORDLENGTH];
int lagersaldo;
};
void saveProduct(struct varor reg[], int nrOfGoods){
FILE * fp;
char nameFile[WORDLENGTH];
int i, j, varunummer;
printf("Enter varunummer: ");
scanf("%d", &varunummer);
for(i=0; i<nrOfGoods; i++){
if ( reg[i].varunummer == varunummer){
printf("Enter file name to save (end with .txt): ");
scanf("%s", nameFile);
fp = fopen (nameFile, "w");
//fprintf(fp,"%d\n", nrOfGoods);// this delete all my other saved items
for(i=0;i<(nrOfGoods);i++){
fprintf(fp,"%d\n", reg[i].varunummer);
fprintf(fp,"%s\n", reg[i].namn);
fprintf(fp,"%d\n", reg[i].lagersaldo);
}
} else printf("\nVarunummer not found!\n");
}
fclose(fp);
}
最佳答案
您不应该在第二个循环中写入这些项目。只需写出匹配的项目即可。
您还需要在循环之前打开文件。当您以 w
模式打开文件时,它会首先清空该文件,因此每次循环都会删除上一次迭代。
并且您不应该在循环内打印 Varunnummer not find
,因为在遍历整个数组之前您无法判断是否未找到该项目。使用您在找到匹配项时设置的变量;如果你找不到任何东西,它不会被更新,你可以在最后打印一条消息。请参阅Searching array reports "not found" even though it's found
struct varor{
int varunummer;
char namn[WORDLENGTH];
int lagersaldo;
};
void saveProduct(struct varor reg[], int nrOfGoods){
FILE * fp;
char nameFile[WORDLENGTH];
int i, j, varunummer;
int found = 0;
printf("Enter varunummer: ");
scanf("%d", &varunummer);
printf("Enter file name to save (end with .txt): ");
scanf("%s", nameFile);
fp = fopen (nameFile, "w");
for(i=0; i<nrOfGoods; i++){
if ( reg[i].varunummer == varunummer){
fprintf(fp,"%d\n", reg[i].varunummer);
fprintf(fp,"%s\n", reg[i].namn);
fprintf(fp,"%d\n", reg[i].lagersaldo);
found = 1;
}
}
fclose(fp);
if (!found) {
printf("\nVarunummer not found!\n");
}
}
关于c - 如何仅将一项保存到 .txt 文件?功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46918087/