предупреждение: присваивание делает целое число из указателя без приведения [-Wint-преобразование] в C - PullRequest
0 голосов
/ 04 мая 2020

Это не вся моя программа, но я думаю, что это единственные части, которые вам понадобятся, поскольку используются только эти функции.

typedef struct
{
char name[64];
int balance;
int gain;
}
Player;

Player Players[10];
FILE *fp;

Player GetPlayerData(const char* name, Player p){
  char First[100];
  int i = 0;
  for (;;)
  {
      if (strcmp(name, p[i].name) == 0)
      {
        return p[i];
      }
     /*else{
        printf("The name you inputed is not on the list.\n"
        "Here are the names that are: \n");
        while(1){
          fscanf(fp, "%s", &First);
          printf("\n%s %d", First);
          if(feof(fp) == 1){
            break;
          }
        }
      }
      i++;*/
  }
}

void TopBal(){
  char name[64];
  int Add[100];

  printf("Enter your name: ");
  scanf("%s", &name);
  Player p = GetPlayerData(name, Players);
  printf("How much money would you like to add: ");
  scanf("%d", &Add);
  p.balance = p.balance + Add;
  printf("Your balance is now %d", p.balance);
  //PushPlayerData(FILE_NAME, name);
}

Это предупреждение. ./Project.c: В функции 'TopBal': ./Project.c:108:15: предупреждение: присваивание делает целое число из указателя без приведения [-Wint-преобразование] (p) .balance = (p ) .balance + Add;

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Add - это массив, и он преобразуется в указатель в выражениях (за исключением некоторых исключений, таких как операнд sizeof operatpr).

Вы не используете многоэлементную функцию массива Add, поэтому это должна быть простая переменная int Add;, а не int Add[100];.

. Вам также следует удалить & в scanf("%s", &name);, поскольку это приводит к несоответствию типов (указатель на массив char(*)[64] передается при ожидается указатель на символ char*), который вызывает неопределенное поведение . Помните снова, что большинство массивов в выражениях преобразуются в указатели.

0 голосов
/ 04 мая 2020
p.balance // This is int
 = p.balance // again int
 + Add; // but this is int array / pointer

Вы, вероятно, хотели почтить Add. например,

 p.balance = p.balance + Add[0];
...