C中的Struct,与结构一起使用

时间:2013-07-23 04:11:38

标签: c struct

我有这个功能,我试图在一个结构中搜索一个数组。 现在我无法理解我的错误在哪里,但我相信,在定义函数的部分,我尝试将播放器国家/地区转换为小写。(在文件中包含国家/地区的名称)。当我运行该程序时,我输入国家名称,程序刚停止并在输入我想要搜索的名称后崩溃。

任何人都可以帮助我吗?谢谢。

#define NAME_LENGTH 50
#define NUM_PLAYERS 200

struct player_champ
{
    char player_country[NAME_LENGTH];
};

int search_player_by_country( struct player_champ  ptr_player[] , char asked_name[NAME_LENGTH], int lines_got);   
int main (void)    
{
    struct player_champ  player_info[NUM_PLAYERS] = { { 0 } };
    char asked_country[NAME_LENGTH]= {0};

    fflush(stdin);
    printf("\nEnter the name of the country you want to search for.\n\n>>>");
    fgets(asked_country, sizeof(asked_country)-1, stdin);
    asked_country[strlen(asked_country)-1] = '\0';
    search_player_by_country ( player_info, asked_country, num_lines_read);

    int search_player_by_country( struct player_champ ptr_player[] , char asked_country[NAME_LENGTH], int lines_got)
    {
        char temp_asked_country[NAME_LENGTH], temp_country_name[NAME_LENGTH];
        int i,k,z=0,j,counter=0;

        // there is a part of the code here that converts what user entered to lower case as well.

        for (i = 0 ; i < lines_got; i ++)
        {     
            k=0;

            /* while (ptr_player[i].player_country)
            {
                temp_country_name[j] = tolower (ptr_player.player_country);
                j++;
            }*/

            for (k = 0 ; k < lines_got; k ++)
            {
               temp_country_name[k] = tolower (ptr_player[k].player_country);
               k++;
            }
            temp_country_name[k] = '\0';

            if (strstr(temp_country_name, temp_asked_country) != NULL)
            {
               print_info( ptr_player[i]);
            }
        }
    }

1 个答案:

答案 0 :(得分:3)

这段代码完全错了:

    for (k = 0 ; k < lines_got; k ++)
    {
        temp_country_name[k] = tolower (ptr_player[k].player_country);
        k++;
    }
  1. 你在循环标题和正文中递增k两次。
  2. 分配的目标是temp_country_name字符串中的单个字符,但tolower()的参数是整个字符串。你是不是从编译器那里得到一个警告,说tolower()的参数是错误的类型(它需要一个char,你给它一个char*)?
  3. 您已经使用i在外循环中迭代线。这个循环应该迭代字符。
  4. 试试这个:

        for (k = 0 ; ptr_player[i].player_country[k]; k ++)
        {
            temp_country_name[k] = tolower (ptr_player[i].player_country[k]);
        }
    

    ptr_player[i]是数组中元素i的播放器。 player_country[k]是该字符串中的字符k。所以ptr_player[i].player_country[k]是第i个玩家所在国家的第k个角色。

    您的代码中可能存在其他问题,我没有尝试过找到它们。