2016-05-18 9 views
-2

intstructと動作しないと思われますが、その理由はわかりません。私は以前と同じことをして、それは働いたが、今それはしません。Intは構造体では機能しません

これがメインコードです。

int main() 
{ 
    struct elemente { 
    char *prod[20]; 
    int cod[20]; 
    int cant[20]; 
    int pret[20]; 
    }; 

    struct elemente a[20]; 
    int i,n=1,p[20]; 
    char *val[20]; 
    for(i=1;i<=n;i++){ 
     puts("Numele produsului"); 
     scanf("%s",&a[i].prod); 
     puts("Codul"); 
     scanf("%i",&a[i].cod); 
     puts("Cantitatea"); 
     scanf("%i",&a[i].cant); 
     puts("Pretul"); 
     scanf("%i",&a[i].pret); 
    } 

問題があるとわかりません。

これは問題の原因です。

puts("Scrieti numele produsului");scanf("%s", &val); 

    for(i=1;i<=n;i++){ 
     if(strcmp(val,a[i].prod)==0){ 
      printf("Codul produsului: %i\n", a[i].cod); 
      printf("Cantitatea: %i\n", a[i].cant); 
      printf("Pretul: %i\n", a[i].pret); 
      //p[i]=a[i].cant*a[i].pret; 
      //printf("Valoarea totala a elementelor %i\n",p[i]); 
     } 
    } 

strcmpが問題ありません。しかし、私はscanfで入力した整数を見つけることができません。それは "2303134"のような奇妙なコードを表示します。私は何を間違えたのですか? また、2つの関数を掛ける必要がありますが、CodeBlocksには*シンボルに問題があります。これをどうすれば解決できますか?

+2

'for(i = 1; i <= n; i ++)'はおそらく怪しいです............... –

+1

'main'で型を定義していますか? hm .. –

+0

私は以前のプログラムで同じことをしました。私はこの種の問題を抱えていませんでした。 –

答えて

1

問題は、structに1つではなく各要素の配列が含まれていることです。これはまた、2 intの代わりに2つのint [20]を乗算しようとしているので、乗算a[i].cant*a[i].pretはコンパイルされません。あなたはしないようにするために、次のように

struct elemente { 
    char prod[50]; 
    int cod; 
    int cant; 
    int pret; 
}; 

あなたはその後、prodで読むためにscanf呼び出しを変更します:あなたはstruct elementeの配列を作成しているので

、あなただけの入力にそれぞれ1つの要素が必要また

scanf("%49s",a[i].prod); 

、値が実際に読まれたかどうかを確認するためにscanfの戻り値を確認してください

:値が処理できる以上の文字を読みます。
0

printf("Codul produsului: %i\n", a[i].cod)の場合、整数の値の代わりにa[i].codのアドレスを印刷しようとしているためです。

この問題を解決する最も簡単な方法は、あなたに構造体を変更している:あなたの構造体でint型の配列を割り当てるには何の要件はありませんようだ

struct elemente { 
    char *prod[20]; 
    int cod; 
    int cant; 
    int pret; 
}; 

、変数が十分であるint型。 この変更後、

p[i]=a[i].cant*a[i].pret; 
printf("Valoarea totala a elementelor %i\n",p[i]); 

は正常に動作するはずです。

関連する問題