我是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)
我知道怎么做第一行,但我不知道如何扫描文件中的条形码..
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);
答案 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