2016-07-17 8 views
-3

図1は、アイテムコード、アイテム名、アイテム価格、およびアイテム数を格納するテキストファイル(itemlist.txt)を示しています。テキストファイルからデータを読み取って画面に0個の項目の情報を表示するプログラムを作成します。ファイルCのプログラミングでエラーが発生しました

itemCode   a unique unsigned integer that differentiates an item from another 
itemName   the name of an item (not more than 50 characters) 
itemPrice   the current selling price of an item 
itemQuantity  an integer that shows the quantity of an item    

はまた、ファイル内のフィールドは、カンマで区切られていると仮定:

は、ファイルに格納されたデータであると仮定する。

ファイル内容:

3123,Potato Chips,3.99,8 
2213,Peanut butter,7.99,0 
4533,Candy,1.05,14 
8744,Ice cream,2.50,0 

出力例:

Out-of-stock items: 
------------------------------- 
2213 Peanut butter 7.99 
8744 Ice cream 2.50 

誰もが私のコードを読んで、問題が何であるかを見ることはできますか?プログラムが異常終了しますが、なぜ...

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
    unsigned int itemCode; 
    char itemName[50]; 
    float itemPrice; 
    int itemQuantity; 

    FILE *fp; 
    fp = fopen("itemlist.txt", "r"); 
    printf("%s","Out-of-stock items: \n"); 
    printf("-------------------------"); 

    while(!feof(fp)) { 
    fscanf(fp, "%4u,%[^,],%f,%d", &itemCode, itemName, &itemPrice, &itemQuantity); 

    if(itemQuantity == 0){ 
     printf("%u %s %f\n",itemCode,itemName,itemPrice); 
    } 


    } 
    fclose(fp); 

    return 0; 



} 

私は知りませんし、また、私はitemNameにしてありますどのように多くの要素、アイテムの名前が50以上の文字でない場合ことを知っていただきたいと思いますアレイ?

+0

figure1とは何ですかここで図を提供したり、その部分を削除してください。 –

+0

デバッガを使用して、問題の場所を特定します。それは問題を特定するための良い方法になるはずですが、それを修正する方法ではありません。 –

+2

おそらくfscanfからの戻り値をチェックするのがよいスタートポイントになります –

答えて

0

あなたの主な問題はおそらくあなたのプログラムではなく、あなたの環境です。私はあなたのプログラムをテストしたが、クラッシュすることはなく、問題のファイルに対して正しい出力を出す。ファイルのアクセス許可を確認するか、プログラムを使って新しいプロジェクトを作成してください。

0

あなたのコードは、いくつかの入力レコードがitemName 50文字以上の長さが含まれている場合、未定義の動作が発生し、あなたが制限されたバッファを使用しているので:

char itemName[50]; 

多分原因scanf()に、カスタム解析を実装する方が良いだろうではありませんすべての可能な入力を満たすのに十分な柔軟性。

関連する問題