2016-11-03 5 views
-1

車で構造体を実現する際に問題が発生しました。車庫に各車の数を出力する必要がありますので、出力は次のようになります。 Audi 3 Ford 1 ポルシェ1 私はユニークな要素の数を積み重ねています。文字列の配列を作成し、構造体を通過し、uが最後に到達するたびに新しい要素を追加する必要があることを知っています要素が文字列の配列に見つかりませんでした。Cの構造体の配列内のユニークな要素を数えます

 #include <stdio.h> 
    #include <Windows.h> 
    #include <time.h> 

    typedef struct Auto{ 
     char Model [16]; 
     char Number [8]; 
     char Color [10]; 
     char Name [16]; 
    }; 

    int main() { 

    int i, j, counter = 0; 
    char EnteredModel[16] = { "Audi" }; 
    struct Auto MyAuto[5] = { { "Audi", "x007x", "blue", "Alexander" }, 
           { "Ford", "x777x", "red", "Andrey" }, 
           { "Porsche","a000b", "white", "Oleg"}, 
           { "Audi", "x007x", "blue", "Sergey"}, 
           { "Audi", "f666f", "black", "Daniel"} }; 

    //printf("Enter the number of the interested model: "); 
    //scanf("%s", &EnteredModel); 

    for (i = 0; i < 5; i++) { 
     if (i == 0) { 
      printf("#####################################################\n"); 
      printf("#Model   #Number #Color  #Name   #\n"); 
      printf("#####################################################\n"); 
     } 
     if (strcmp(MyAuto[i].Model, EnteredModel)) { 
      printf("%-17s%-9s%-11s%-17s\n", MyAuto[i].Model, MyAuto[i].Number, MyAuto[i].Color, MyAuto[i].Name); 
     } 
    } 

    for (j = 0; j < 5; j++) { 
     for (i = 0; i < 5; i++) { 
      if (strcmp(MyAuto[i].Model, MyAuto[j].Model) == 0) { 
       counter++; 
      } 
     } 
     printf("%s = %d\n", MyAuto[j].Model, counter); 
     counter = 0; 
    } 
    printf("\n"); 
    system("pause"); 
    return 0; 
} 
+2

に変更されたことを確認しますが、 'typedef'を除去することができる、それがここには目的を持っていません。 –

+1

'if(strcmp(MyAuto [i] .Model、EnteredModel)== 0){':あなたはゼロに対してテストを忘れてしまった。あなたの質問はまだ非常に不明です。 –

+1

私にはあなたの求めるものが不明です。投稿されたコードにどのような問題がありますか? – 4386427

答えて

0

一つの方法は、あなたの現在の配列と同じ長さの「モデル数え」配列を作る、あなたがすでに数えている車の「記憶」するためにそれを使用することです。

例:

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

struct Auto{ 
    char Model [16]; 
    char Number [8]; 
    char Color [10]; 
    char Name [16]; 
}; 

int main() { 

    int i, j, counter=0; 
    char EnteredModel[16] = { "Audi" }; 
    struct Auto MyAuto[5] = { { "Audi", "x007x", "blue", "Alexander" }, 
          { "Ford", "x777x", "red", "Andrey" }, 
          { "Porsche","a000b", "white", "Oleg"}, 
          { "Audi", "x007x", "blue", "Sergey"}, 
          { "Audi", "f666f", "black", "Daniel"} }; 
    int modelCounted[5] = {0}; 

    //printf("Enter the number of the interested model: "); 
    //scanf("%s", &EnteredModel); 

    for (i = 0; i < 5; i++) { 
    if (i == 0) { 
     printf("#####################################################\n"); 
     printf("#Model   #Number #Color  #Name   #\n"); 
     printf("#####################################################\n"); 
    } 
    if (strcmp(MyAuto[i].Model, EnteredModel) == 0) { 
          // NOTICE:  ^^^^ 
     printf("%-17s%-9s%-11s%-17s\n", MyAuto[i].Model, MyAuto[i].Number, MyAuto[i].Color, MyAuto[i].Name); 
    } 
    } 

    printf("\n"); 
    for (j = 0; j < 5; j++) { 
    if (!modelCounted[j]) // Only enter inner-loop if car hasn't been counted already 
    { 
     for (i = 0; i < 5; i++) { 
     if (strcmp(MyAuto[i].Model, MyAuto[j].Model) == 0) { 
      counter++; 
      modelCounted[i] = 1; // Mark car as counted 
     } 
     } 
     printf("%s = %d\n", MyAuto[j].Model, counter); 
     counter = 0; 
    } 
    } 
    printf("\n"); 

    return 0; 
} 

は出力:

##################################################### 
#Model   #Number #Color  #Name   # 
##################################################### 
Audi    x007x blue  Alexander 
Audi    x007x blue  Sergey 
Audi    f666f black  Daniel 

Audi = 3 
Ford = 1 
Porsche = 1 

ところで:最初strcmp無関係

関連する問題