如何将包含空格的字符串存储到一个var中?

时间:2013-07-29 18:44:20

标签: c string barcode scanf

我是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存储在双变量
  5. 我知道怎么做第一行,但我不知道如何扫描文件中的条形码..

    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);
    

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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;
}

答案 2 :(得分: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