c - 如何仅将一项保存到 .txt 文件?功能

标签 c

如何仅保存与我的 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/

相关文章:

c - 找不到模块 : modprobe

python - 如何以非交互方式使用 NIST 软件?

c++ - 如何找到 MPI 消息截断错误的来源?

c - strtof = strtod 后跟 cast?

c - 对于通用内存池,如何在 C 中的指针之间自由转换?

c - 先声明变量还是直接声明变量,有区别吗?

c - C 库是否应该提供使用自定义内存分配器的能力?

c - 缓冲区溢出攻击分段故障(核心转储)

c - 链接栈和队列

c - 将矩阵的行数重新分配为大于初始值的数字