0

3つの数字で1行を読み取る簡単なプログラムがあります。「製品」のコードである最初の番号をスキップする必要があります。

したがって、2 番目と 3 番目の文字だけを読み取る必要があります。

これどうやってするの?

今までのコード:

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

int calculate_price (number, value)
{
    int price=0;
    price= number*value;
    return price;
}

int main(void)
{
    int number, value, u,price;
    FILE  *bill, *total_price;
    bill= fopen("bill.txt","rt");
    total_price= fopen("total_price.txt","wt");

    if (bill== NULL)
    {
        printf("The file cannot be open.\nQuitting the program.\n");
        exit(1);
    }

    if (total_price== NULL)
    {
        printf("The file canno be written.\nQuitting the program.\n");
        exit(1);
    }

    while (fscanf(bill, "%d %d",&number, &value) != EOF)
    {
        u=calculate_price(number, value);
        fprintf(total_price,"The total price is %d\n", u);
    }
    printf("File created sucessfully. Check the file.\n");

}
4

4 に答える 4

1
int main(void)
{
    int number, value, u,price;
    int dummy; //this is a dummy var

...

while (fscanf(bill, "%d %d %d",&dummy, &number, &value) != EOF)
{
    u=calculate_price(number, value);
    fprintf(total_price,"The total price is %d\n", u);
}
printf("File created sucessfully. Check the file.\n");

EDIT以前はダミーに char を使用していましたが、どういうわけか最初の質問を誤解していましたが、int になるように修正しました...

于 2012-10-21T19:25:59.957 に答える
1

これはあなたのために働くはずです:

fscanf(bill, "%*d %d %d", &number, &value)

scanf ドキュメントから:

オプションの '*' 代入抑制文字: scanf() は、変換仕様の指示どおりに入力を読み取りますが、入力を破棄します。対応するポインター引数は必要ありません。また、この指定は、scanf() によって返される成功した割り当ての数には含まれません。

于 2012-10-21T19:30:22.583 に答える
0

次のようなことを試してください:

fscanf(bill, "%d %d %d", &product, &number, &value)

...そして、の値を無視しますproduct

于 2012-10-21T19:25:43.843 に答える
0

最も簡単な方法はscanf、数値をダミー (未使用) 変数に入れることです。

int product, number, value;
...
while(fscanf(bill, "%d %d %d", &product, &number, &value)) {
    ...
}
于 2012-10-21T19:25:57.233 に答える