在进行更改然后重命名为旧文件名后,尝试通过复制到新文件来重写文件?

时间:2014-03-10 13:13:23

标签: c csv file-io

要运行我们编写的程序:
库存扣除itemName

从我们命名的任何foodItem的数量中扣除1。

我的输入是逗号分隔值文本文件(.csv)。这是我保存为(.csv)的文本文件:

hotdog, 10, 2, 1.50  
bun, 10, 2, 0.50  
burger, 100, 10, 2.00  

扫描到我的阵列工作。但是现在我对如何重写文件感到有些困惑。我尝试使用putc,但我收到fputs(item[j],fp2);

的错误
74  6   C:\coding\Inventory.c   [Warning] passing argument 1 of 'putc' makes integer from pointer without a cast [enabled by default]

好的,不再编译错误。但是正在创建的replica.csv文件很奇怪。我试图让它与上面的.csv格式相同。我出错的任何线索?此外,rename不会将“replica.csv”更改为“inventory.csv”。该文件仍称为“replica.csv”

感谢。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int i = 0, j = 0;
    char command[50], argument[50], str[100];
    int quantity[100], limit[100];
    double cost[100];
    char *item[100];
    char *token, *ptr;

    FILE *fp1 = fopen("inventory.csv", "r");
    if(fp1 == NULL)
    {
        perror ("Error opening file");
    }

    while(fgets(str, 100, fp1) != NULL)
    {
        token = strtok (str,",");
        ptr = strdup(token);
        item[i] = ptr;
        sscanf (token, "%s", item[i]);
        token = strtok (NULL,",");
        sscanf (token, "%d", &quantity[i]);
        token = strtok (NULL,",");
        sscanf (token, "%d", &limit[i]);
        token = strtok (NULL,"\n");
        sscanf (token, "%lf", &cost[i]);
        i++;
    }

    strcpy(command, argv[1]);

            if(strcmp(command,"deduct") == 0)
            {
                strcpy(argument, argv[2]);

                for(j=0;j<i;j++)
                {
                    if(strcmp(argument,item[j]) == 0)
                    quantity[j]--;

                }
                FILE *fp2 = fopen("replica.csv", "w");
                for(j=0;j<i;j++)
            {
                fprintf (fp2, "%s,%d,%d,%.2lf\n", item[j], quantity[j], limit[j], cost[j]) ;
            }
                fclose(fp1);
                fclose(fp2);
                remove("inventory.csv");
                rename("replica.csv", "inventory.csv");
            }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

第二个for(j=0;j<i;j++)循环应该是这样的:

FILE *fp2 = fopen("replica.csv", "w");

for(j=0;j<i;j++)
{
  fprintf (fp2, "%s,%d,%d,%lf\n", item[j], quantity[j], limit[j], cost[j]) ;
}

您使用的fputs类型不是char*,程序将无法编译。使用putcint将参数视为char,例如使用putc(65, fp),您将在A文件中获得65而不是fp

您的代码中可能存在其他问题。