1

我是 C 新手,现在我正在使用 FILE 假设我有一个名为 data.txt 的文件,它包含这些东西

4536279|Chocolate Bar|23|1.99
3478263|Chips|64|3.44
4245553|4% Milk|12|3.99

1st field is BAR CODE
2nd field is PRODUCT NAME
3rd field is QUANTITIES
4th field is PRICE

并且它们用竖线 (|) 分隔

然后用户输入条形码(例如 3478263)

  1. 我必须将它存储到一个变量中
  2. 然后将产品名称存储在 STRING 变量中
  3. 将 QUANTITIES 存储在 int 变量中
  4. 将 PRICE 存储在双变量中

我知道如何做第一行,但我不知道如何扫描文件的条形码..

int bar=0;
int upc=0;
inv=fopen("data.txt", "r");

printf("Enter barcode: ");
scanf("%d", bar);
do {
    fscanf(inv, "%d", &upc);
    printf(" UPC: %d", upc);

} while (bar != upc);
4

3 回答 3

1

检查答案以进行字符串解析。你应该能够达到你的目的。您可以将字符串存储在 char* 变量中。基本上它是一个字符数组。空格也是一个字符,您可以像字符串中的任何其他字符一样简单地存储它。我希望它会有所帮助。

于 2013-07-29T18:55:46.113 回答
0

像这样的方式

#include <stdio.h>

typedef struct record {
    int barcode;          //1st field is BAR CODE
    char product_name[32];//2nd field is PRODUCT NAME
    int quantities;       //3rd field is QUANTITIES
    double price;         //4th field is PRICE
} Record;

int main(void){
    FILE *fin = fopen("data.txt", "r");
    Record rec;
    int ent_barcode, bar_code;

    printf("Enter barcode: ");
    scanf("%d", &ent_barcode);

    while(fscanf(fin, "%d", &bar_code)==1){
        if(ent_barcode == bar_code){
            rec.barcode = bar_code;
            if(3==fscanf(fin, "|%31[^|]|%d|%lf", rec.product_name, &rec.quantities, &rec.price))
                break;
        }
        fscanf(fin, "%*[^\n]");
    }
    fclose(fin);
    printf("barcode:%d, product name:%s, quantities:%d, price:%g\n",
           rec.barcode, rec.product_name, rec.quantities, rec.price);

    return 0;
}
于 2013-07-29T19:30:59.850 回答
0

你应该依靠这个strtok功能来完成这样的工作。它可以帮助您将字符串拆分为标记。

乍一看,它的功能strtok似乎有点奇怪。首先,您必须使用要拆分的字符串和列分隔符调用函数来初始化解析。第一次调用的返回值已经是第一列的内容。

strtok在随后的电话中,您必须像这样打电话

 ret = strtok(NULL, "|");

由于strtok用字符串初始化并在内部保存他的状态,它知道如何继续。到达最后一列后strtok返回NULL

使用的问题的实现strtok可能如下所示:

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

const char *text[] = { "4536279|Chocolate Bar|23|1.99",
    "3478263|Chips|64|3.44",
    "4245553|4% Milk|12|3.99",
    NULL
};

char *column[] = { "barcode", "name", "quantity", "price" };

int
main (int argc, char *argv[])
{

    char *ret, *str;
    int i, j;

    for (i = 0; text[i] != NULL; i++) {
        str = strdup (text[i]);
        ret = strtok (str, "|");

        for (j = 0; ret != NULL; j++) {

            printf ("%10s: %s\n", column[j], ret);
            ret = strtok (NULL, "|");

        }
        printf ("\n");
    }

    return 0;
}

该程序的输出是:

   barcode: 4536279
      name: Chocolate Bar
  quantity: 23
     price: 1.99

   barcode: 3478263
      name: Chips
  quantity: 64
     price: 3.44

   barcode: 4245553
      name: 4% Milk
  quantity: 12
     price: 3.99
于 2013-07-29T19:38:28.240 回答