#include <stdio.h>
#define MAX_TITLE_SIZE 20
#define MAX_BOOKS 10
struct Book {
int _isbn;
float _price;
int _year;
char _title[MAX_TITLE_SIZE + 1];
int _qty;
};
void clear(void);
int readRecord(FILE *fp, struct Book *b2read);
void displayInventory(const char filename[]);
int main(void) {
struct Book myBook;
char filename[21] = "144_w9_inventory.txt";
displayInventory(filename);
return 0;
}
void clear(void) {
while (getchar() != '\n');
}
int readRecord(FILE *fp, struct Book *b2read){
//Define a variable int rv = 0
int rv = 0;
rv = fscanf(fp, "%d;%f;%d;%d;%20[^\n]", &(b2read->_isbn), &(b2read->_price), &(b2read->_year), &(b2read->_qty), b2read->_title);
//return rv;
return rv;
}
void displayInventory(const char filename[]) {
struct Book myBook;
FILE *fp = NULL;
int i;
fp = fopen(filename, "r"); //open the file for reading
if (fp != NULL) {
printf("\n\nInventory\n");
printf("===================================================\n");
printf("ISBN Title Year Price Quantity\n");
printf("---------+-------------------+----+-------+--------\n");
while(readRecord(fp, &myBook) == 5){
printf("%-10.0d%-20s%-5d$%-8.2f%-8d\n", myBook._isbn, myBook._title, myBook._year, myBook._price, myBook._qty);
}
printf("===================================================\n");
printf("\n");
fclose(fp);
}
else {
printf("Failed to open file\n");
}
}
は次のとおりです。Cのテキストファイルから値をスキャンするときに入力バッファをクリアする方法は?テキストファイル内にある何
234562;23.99;2010;3;Harry Potter
567890;12.67;2015;4;The Hunger Games
109821;53.20;2017;2;Stranger Things
出力:
Inventory
===================================================
ISBN Title Year Price Quantity
---------+-------------------+----+-------+--------
234562 Harry Potter
2010 $23.99 3
567890 The Hunger Games
2015 $12.67 4
109821 Stranger Things 2017 $53.20 2
===================================================
私は出力私はすべての値を取得することができるよが、プログラム何らかの理由でI文字列全体が半分になり、1行下にシフトした値を出力します。あなたが見てみたい場合は
repl.itはここにある:
私は出力を単一の行にプリントアウトしてもらうにはどうすればよいです。そうであれば\ n "改行"を読むのではなく?
このコードは正常に見える、と私のシステムで期待どおりに動作します。再現できません。これはコードを実行しているオンラインテスト環境とは関係がないと確信していますか? –
あなたは@DavidBowlingですが、Visual Studioで動作しましたが、repl.it環境では別の方法でコンパイルされました。 repl.itを使用して、テストするたびにVSの新しいインスタンスを作成するのではなく、出力をテストします。 – mincedMinx