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 を double 変数に格納する

最初の行を実行する方法は知っていますが、ファイルのバーコードをスキャンする方法がわかりません..

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

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 に答える