2017-03-04 7 views
-1

このコードは、小数点以下2桁で入力されているものの正確な値を出力することになっていますが、が入力されている。驚いたことに名前は完璧に印刷されていますが、印刷された(注文金額)値は常に小数点以下2桁でゼロになります。何が問題になったのか教えてください。そして、はい、私はまだこれの初心者です。数値の値が何であっても0.00浮動小数点値の出力を持つ

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

struct customer 
{ char customer_name[20]; 
    float order_amount; 
}c[10]; 

int main() 
{ int i; 

    clrscr(); 

    printf("\n******Enter customer details******\n"); 

    for(i=0; i<10; ++i) 
    { 
     printf("\nEnter customer name: "); 
     fflush(stdin); 
     gets(c[i].customer_name); 
     printf("Enter order amount: "); 
     scanf(" %0.2f",&c[i].order_amount); 
    } 

    printf("\n\t*********Displaying information*********\n"); 
    printf("\nCustomers that has ordered are: \n"); 

    for(i=0; i<10; ++i) 
    { printf("\nCustomer name: %s\n",c[i].customer_name);  
     printf("Ordered amount: %0.2f\n",c[i].order_amount); 
    } 
    return 0; 
} 

ありがとうございます。

+2

は '')(取得は使用しないでください。これまでバッファーオーバーフローがあなたを襲うでしょう。 – Siguza

+2

'fflush(stdin);'は未定義のビヘイビア*と 'gets()'を呼び出し、バッファオーバーランの危険が避けられず、C99では廃止され、C11では削除されます。ワイルドコード... – MikeCAT

+1

テスト用の入力データを投稿してもよろしいですか? – MikeCAT

答えて

1

あなたはscanfに空白を追加しています。 scanf( "%s"、...)とscanf( "%f"、...)ではなくscanf( "%s"、...)でなければなりません。 。

1

まず、scanfをフォーマットで実行すると、正しく動作しません。それが何をするのか分かりませんが、フロートを読むのはまったく役に立たないです。ちょうど%fを使用してください。空白はなく、フロートが読み込まれます。

は、あなたがそれが、その後

1の代わりに0を返されたバッファオーバーフローを避けるために保護scanfの賛成でgetsをドロップすることを見てきただろう、あなたはscanfリターンコードをチェックしていました。

以下このコードは正常に動作します:

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

struct customer 
{ char customer_name[20]; 
    float order_amount; 
}c[10]; 

int main() 
{ int i; 
    int n=10;  

    printf("\n******Enter customer details******\n"); 

    for(i=0; i<n; i++) 
    { 
     printf("\nEnter customer name: "); 
     scanf("%19s",c[i].customer_name); // not above 19 characters 
     printf("Enter order amount: ");   
     scanf("%f",&(c[i].order_amount)); // plain scanf %f 
    } 
    // print routine is unchanged 

    printf("\n\t*********Displaying information*********\n"); 
    printf("\nCustomers that has ordered are: \n"); 

    for(i=0; i<n; ++i) 
    { printf("\nCustomer name: %s\n",c[i].customer_name);  
     printf("Ordered amount: %0.2f\n",c[i].order_amount); 
    } 
    return 0; 
} 
+0

しかしそれはscanf:浮動小数点フォーマットはリンクされていないと言います – JustABeginner

+0

?コンパイル時に?どの行?より具体的にしてください。ここgccで動作します –

関連する問題