2017-07-19 8 views
-2
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

#define LEN_LINE 80 
#define LEN_NAME 30 
#define MAX_LINES 30 
#define LEN_POS 5 
#define LEN_HAND 5 
#define LEN_THROW 5 
#define LEN_STATUS 20 
#define LEN_MLBSTATUS 5 

typedef struct 
{ 
    int jerseyNumber; 
    char firstName[LEN_NAME + 1]; 
    char lastName[LEN_NAME + 1]; 
    char position[LEN_POS + 1]; 
    char battingHand[LEN_HAND + 1]; 
    char throwingHand[LEN_THROW + 1]; 
    int birthYear, birthMonth, birthDay, heightFeet, heightInches, weight; 
    char status[LEN_STATUS + 1]; 
    char mlbStatus[LEN_MLBSTATUS + 1]; 


}player_t; 

//protype 
void displayPlayer(player_t *aPlayerPtr); 


int main(void) 
{ 
    FILE * filePtr; 
    int index, count; 
    char line[LEN_LINE + 1]; 
    player_t players[MAX_LINES]; 
    filePtr = fopen("Shrimp.txt","r"); 
    if (filePtr == NULL) 
    { 
     printf("Unable to open file.\n"); 
    } 
    else 
    { 
     index = 0, count; 
     while(index < MAX_LINES && fgets(line, LEN_LINE, filePtr)) 
     { 
      if(14 == sscanf(line, "%i %s %s %s %s %s %i %i %i %i %i %i %s %s", 
          &players[index].jerseyNumber, players[index].lastName, 
          players[index].firstName, players[index].position, 
          players[index].battingHand, players[index].throwingHand, 
          &players[index].birthYear, &players[index].birthMonth, 
          &players[index].birthDay, &players[index].heightFeet, 
          &players[index].heightInches, &players[index].weight, 
          players[index].status, players[index].mlbStatus) 

       ) 
      { 
       index++; 
      } 
     } 
    fclose(filePtr); 
    count = index; 

    for(index = 0; index < count; index = index + 1) 
    { 
     displayPlayer(&players[index]); 
    } 


    } 
    return 0; 
} 

void displayPlayer(player_t *aPlayerPtr) 
{ 
    printf("Player %i and his name is %s , %s. His weight is %i and position %s. His Status is %s and his mlb status %s \n", 
      aPlayerPtr->jerseyNumber, aPlayerPtr->lastName, aPlayerPtr->firstName, 
      aPlayerPtr->weight, aPlayerPtr->position, aPlayerPtr->status, aPlayerPtr->mlbStatus 
      ); 
} 

だから、ファイルから情報を構造体の配列に読み込むように設計しました。ユーザーがプレーヤーの情報を検索することを可能にすることを想定しています誰かが私を正しい方向に向けることができれば幸いです。構造体Cの配列を検索する方法

+2

あなたが試したことを示してください。 –

+10

?ループして比較する?問題はどこですか? –

+1

あなたのコードで 'index = 0、count;'となるのはどういう意味ですか? – Sma

答えて

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

#define LEN_LINE 80 
#define LEN_NAME 30 
#define MAX_LINES 30 
#define LEN_POS 5 
#define LEN_HAND 5 
#define LEN_THROW 5 
#define LEN_STATUS 20 
#define LEN_MLBSTATUS 5 
#define MAX_PLAYERS 26 

typedef struct 
{ 
    int jerseyNumber; 
    char firstName[LEN_NAME + 1]; 
    char lastName[LEN_NAME + 1]; 
    char position[LEN_POS + 1]; 
    char battingHand[LEN_HAND + 1]; 
    char throwingHand[LEN_THROW + 1]; 
    int birthYear, birthMonth, birthDay, heightFeet, heightInches, weight; 
    char status[LEN_STATUS + 1]; 
    char mlbStatus[LEN_MLBSTATUS + 1]; 


}player_t; 

//protype 
void displayPlayer(player_t *aPlayerPtr); 


int main(void) 
{ 
    FILE * filePtr; 
    int index, count; 
    char line[LEN_LINE + 1]; 
    player_t players[MAX_LINES]; 
    filePtr = fopen("Shrimp.txt","r"); 
    if (filePtr == NULL) 
    { 
     printf("Unable to open file.\n"); 
    } 
    else 
    { 
     index = 0, count; 
     while(index < MAX_LINES && fgets(line, LEN_LINE, filePtr)) 
     { 
      if(14 == sscanf(line, "%i %s %s %s %s %s %i %i %i %i %i %i %s %s", 
          &players[index].jerseyNumber, players[index].firstName, 
          players[index].lastName, players[index].position, 
          players[index].battingHand, players[index].throwingHand, 
          &players[index].birthYear, &players[index].birthMonth, 
          &players[index].birthDay, &players[index].heightFeet, 
          &players[index].heightInches, &players[index].weight, 
          players[index].status, players[index].mlbStatus) 

       ) 
      { 
       index++; 
      } 
     } 

    fclose(filePtr); 
    count = index; 

    for(index = 0; index < count; index = index + 1) 
    { 
     displayPlayer(&players[index]); 
    } 

    int jerseyNumber; 
    int i; 


    printf("Enter jersey number for the player: "); 
    scanf("%i",&jerseyNumber); 

    for(i=0;i<=MAX_PLAYERS;i++){ 
     if(jerseyNumber == players[i].jerseyNumber){ 
      printf("The player's name is %s %s\n",players[i].firstName, players[i].lastName); 
     } 
    } 

    } 
    return 0; 
} 

void displayPlayer(player_t *aPlayerPtr) 
{ 
    printf("JERSEY: %i PLAYER NAME: %s %s POSITION: %s BATTING HAND: %s THROWING HAND: %s BIRTHDAY: %i/%i/%i HEIGHT: %i'%i WEIGHT: %i STATUS: %s MLB 40-STATUS: %s\n\n", 
      aPlayerPtr->jerseyNumber,aPlayerPtr->firstName,aPlayerPtr->lastName,aPlayerPtr->position, 
      aPlayerPtr->battingHand,aPlayerPtr->throwingHand,aPlayerPtr->birthMonth,aPlayerPtr->birthDay, 
      aPlayerPtr->birthYear,aPlayerPtr->heightFeet,aPlayerPtr->heightInches,aPlayerPtr->weight, 
      aPlayerPtr->status,aPlayerPtr->mlbStatus 
      ); 
} 

は戻って、それを見た後、私は今、私はそれを行う方法を把握しようとして立ち往生していますけれどもジャージーnumber.Usingにコード

int jerseyNumber; 
int i; 


printf("Enter jersey number for the player: "); 
scanf("%i",&jerseyNumber); 

for(i=0;i<=MAX_PLAYERS;i++){ 
    if(jerseyNumber == players[i].jerseyNumber){ 
     printf("The player's name is %s %s\n",players[i].firstName, players[i].lastName); 
    } 
} 

のこの部分を使用してそれを動作させるために管理しました名前や位置を使用すると、

+0

ヒント、検索する内容をユーザーに確認します。次に、選択した内容に応じてlookupbyxxxxを呼び出します。あなたはすでにlookupbynumberを持っています(最後のforループです) – pm100

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

#define LEN_LINE 80 
#define LEN_NAME 30 
#define MAX_LINES 30 
#define LEN_POS 5 
#define LEN_HAND 5 
#define LEN_THROW 5 
#define LEN_STATUS 10 
#define LEN_MLBSTATUS 5 
#define MAX_PLAYERS 26 

typedef struct 
{ 
    int jerseyNumber; 
    char firstName[LEN_NAME + 1]; 
    char lastName[LEN_NAME + 1]; 
    char position[LEN_POS + 1]; 
    char battingHand[LEN_HAND + 1]; 
    char throwingHand[LEN_THROW + 1]; 
    int birthYear, birthMonth, birthDay, heightFeet, heightInches, weight; 
    char status[LEN_STATUS + 1]; 
    char mlbStatus[LEN_MLBSTATUS + 1]; 


} player_t; 

//protypes for all functions 
void displayPlayer(player_t *aPlayerPtr); 
void displayWelcome(void); 
void resultsProvided(void); 
void singleDisplay(player_t *aPlayerPtr); 

int main(void) 
{ 
    FILE * filePtr; 
    int index, count,i; 
    char line[LEN_LINE + 1]; 
    char userChoice; 
    char repeat; 
    player_t players[MAX_LINES]; 
    filePtr = fopen("Shrimp.txt","r"); 
    if (filePtr == NULL) 
    { 
     printf("Unable to open file.\n"); 
    } 
    else 
    { 
     index = 0; 
     while(index < MAX_LINES && fgets(line, LEN_LINE, filePtr)) 
     { 
      if(14 == sscanf(line, "%i %30s %30s %5s %5s %5s %i %i %i %i %i %i %10s %5s", 
          &players[index].jerseyNumber, players[index].firstName, 
          players[index].lastName, players[index].position, 
          players[index].battingHand, players[index].throwingHand, 
          &players[index].birthYear, &players[index].birthMonth, 
          &players[index].birthDay, &players[index].heightFeet, 
          &players[index].heightInches, &players[index].weight, 
          players[index].status, players[index].mlbStatus) 

      ) 
      { 
       index++; 
      } 
     } 

     fclose(filePtr); 
     count = index; 

     displayWelcome(); 
     do 
     { 
      printf("Choose how you would like to search.\nEnter A to display all players information.\ 
       \nEnter N to search a player based on name.\nEnter J to search a player based on jersey number.\ 
       \nEnter P to search a player based on position.\nEnter your choice: "); 
      scanf("%c",&userChoice); 

      if(userChoice == 'A' || userChoice == 'a'){ 
      for(index = 0; index < count; index = index + 1) 
      { 
       displayPlayer(&players[index]); 
      } 
      } 

      if(userChoice == 'J' || userChoice == 'j'){ 
      int jerseyNumber; 

      printf("Enter jersey number for the player: "); 
      scanf("%i",&jerseyNumber); 

      for(i=0; i<=MAX_PLAYERS; i++) 
      { 
       if(jerseyNumber == players[i].jerseyNumber) 
       { 
        singleDisplay(&players[i]); 

       } 
      } 
      } 
      if(userChoice == 'N' || userChoice == 'n'){ 
      char playerName[LEN_NAME + 1]; 

      printf("Enter name for the player: "); 
      scanf("%s",playerName); 

      for(i=0; i<=MAX_PLAYERS; i++) 
      { 
       if(strcmp(playerName, players[i].firstName)== 0) 
       { 
        singleDisplay(&players[i]); 

       } 
      } 
      } 
      if(userChoice == 'P' || userChoice == 'p'){ 
      char playerPosition[LEN_NAME + 1]; 

      printf("Enter position for the player: "); 
      scanf("%s",playerPosition); 

      for(i=0; i<=MAX_PLAYERS; i++) 
      { 
       if(strcmp(playerPosition, players[i].position)== 0) 
       { 
        singleDisplay(&players[i]); 

       } 
      } 

      } 
      printf ("Would you like to search again?\nEnter Y or y for Yes or any other character to exit this program!\n"); 
      scanf ("\n%c", &repeat); 
     } 
     while (repeat == 'Y' || repeat == 'y'); 
    } 
    resultsProvided(); 

    return 0; 
} 

void displayPlayer(player_t *aPlayerPtr) 
{ 
    printf("JERSEY: %i PLAYER NAME: %s %s POSITION: %s BATTING HAND: %s THROWING HAND: %s BIRTHDAY: %i/%i/%i HEIGHT: %i'%i WEIGHT: %i STATUS: %s MLB 40-STATUS: %s\n\n", 
      aPlayerPtr->jerseyNumber,aPlayerPtr->firstName,aPlayerPtr->lastName,aPlayerPtr->position, 
      aPlayerPtr->battingHand,aPlayerPtr->throwingHand,aPlayerPtr->birthMonth,aPlayerPtr->birthDay, 
      aPlayerPtr->birthYear,aPlayerPtr->heightFeet,aPlayerPtr->heightInches,aPlayerPtr->weight, 
      aPlayerPtr->status,aPlayerPtr->mlbStatus 
     ); 
} 

void displayWelcome(void) 
{ 
    printf("Welcome to Adrian's Baseball Program!\n"); 

} 

void resultsProvided(void) 
{ 
    printf("\nResults provided by Adrian.\n"); 
} 

void singleDisplay(player_t *aPlayerPtr) 
{ 
    printf("JERSEY: %i\nPLAYER NAME: %s %s\nPOSITION: %s\nBATTING HAND: %s\nTHROWING HAND: %s\ 
      \nBIRTHDAY: %i/%i/%i\nHEIGHT: %i'%i\nWEIGHT: %i\nSTATUS: %s\nMLB 40-STATUS: %s\n\n", 
      aPlayerPtr->jerseyNumber,aPlayerPtr->firstName,aPlayerPtr->lastName,aPlayerPtr->position, 
      aPlayerPtr->battingHand,aPlayerPtr->throwingHand,aPlayerPtr->birthMonth,aPlayerPtr->birthDay, 
      aPlayerPtr->birthYear,aPlayerPtr->heightFeet,aPlayerPtr->heightInches,aPlayerPtr->weight, 
      aPlayerPtr->status,aPlayerPtr->mlbStatus 
     ); 
} 

私は、ユーザーが私はトラブル正しく動作するためにelse文を取得したのですrepeatedly.Also検索することができますwhileループのために期待して働いて、ほとんどすべてを取得することができました。

if(userChoice == 'J' || userChoice == 'j'){ 
    int jerseyNumber; 

    printf("Enter jersey number for the player: "); 
    scanf("%i",&jerseyNumber); 

    for(i=0; i<=MAX_PLAYERS; i++) 
    { 
     if(jerseyNumber == players[i].jerseyNumber) 
     { 
      singleDisplay(&players[i]); 

     }else{ 
      printf("The jersey number entered is not found."); 
     } 
    } 
    } 

それがループし、私は、配列に数値を入力した場合でも、それが入力された背番号が見つからない

Welcome to Adrian's Baseball Program! 
Choose how you would like to search. 
Enter A to display all players information. 
Enter N to search a player based on name. 
Enter J to search a player based on jersey number. 
Enter P to search a player based on position. 
Enter your choice: J 
Enter jersey number for the player: 18 
JERSEY: 18 
PLAYER NAME: Matt Tomshaw 
POSITION: P 
BATTING HAND: R 
THROWING HAND: L 
BIRTHDAY: 12/17/1988 
HEIGHT: 6'2 
WEIGHT: 200 
STATUS: Active 
MLB 40-STATUS: No 

(第18号は、ファイル内の最初の背番号である)このようなものを出力します。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号は見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。ジャージー番号番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号は、入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号が見つかりません。入力されたジャージー番号は見つかりません。別の番号を練習したいですか? このプログラムを終了するには、Yesまたは他の文字でYまたはyを入力してください!

関連する問題