C: подписанное значение не является ни массивом, ни указателем - PullRequest
0 голосов
/ 27 марта 2012

Я работаю над некоторой домашней работой для введения в класс C, в котором мы должны написать программу, которая читает входные данные из текстового файла, который содержит информацию о заказе от винодельни.У меня все записано, но когда я его запускаю, единственное, что правильно печатает, это «Винзавод №1:», а затем окно выдает ошибку.Я попытался распечатать один из моих массивов в конце программы, чтобы увидеть, в чем проблема, и затем я получил сообщение об ошибке:

|54|error: subscripted value is neither array nor pointer|

Я понимаю, что означает ошибка, хотя яне уверен, что мне нужно сделать, чтобы исправить это.Я считаю, что правильно объявил свои массивы и тому подобное, но я все еще получаю ошибку.Вот код, который у меня есть:

int main () {
  //Creates the file pointer and variables
  FILE *ifp;
  int index, index2, index3, index4;
  int wineries, num_bottles, orders, prices, sum_order, total_orders;

  //Opens the file to be read from.
  ifp = fopen ("wine.txt", "r");

  //Scans the first line of the file to find out how many wineries there are,
  //thus finding out how many times the loop must be repeated.
  fscanf(ifp, "%d", &wineries);

  //Begins the main loop which will have repititions equal to the number of wineries.
  for (index = 0; index < wineries; index ++) {
    //Prints the winery number
    printf("Winery #%d:\n", index + 1);

    //Scans the number of bottles at the aforementioned winery and
    //creates the array "prices" which is size "num_bottles."
    fscanf(ifp,"%d", num_bottles );
    int prices[num_bottles];

    //Scans the bottle prices into the array
    for (index2 = 0; index2 < num_bottles; index2++)
      fscanf(ifp, "%d", &prices[index2]);

    //Creates variable orders to scan line 4 into.
    fscanf(ifp, "%d", &orders);

    for(index3 = 0; index3 < orders; index3++){
      int sum_order = 0;

      for(index4 = 0; index4 < num_bottles; index4++)
        fscanf(ifp, "%d", &total_orders);

      sum_order += (prices[index4] * total_orders);
      printf("Order #%d: $%d\n", index3+1, sum_order);
    }
  }
  printf("%d", prices[index2]);
  fclose(ifp);
  return 0;
}

Я посмотрел некоторые другие ответы на этом сайте, но ни один из них, похоже, не помог мне с моей проблемой.У меня тонущее чувство, что ответ смотрит мне в лицо, но, будучи усталым любителем-программистом, я так и не смог его найти.Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Есть два prices Один - массив внутри цикла for, а другой - int вне цикла. Так что prices[num_bottles] больше не существует, когда вы пытаетесь напечатать его в конце, где есть только цены int. Очевидно, что цены int нельзя использовать как prices[index2].

Извлеките цены из цикла for и поместите их сверху.

0 голосов
/ 27 марта 2012

Изменить

//Scans the number of bottles at the aforementioned winery and
//creates the array "prices" which is size "num_bottles."
fscanf(ifp,"%d", num_bottles );

на

//Scans the number of bottles at the aforementioned winery and
//creates the array "prices" which is size "num_bottles."
fscanf(ifp,"%d", &num_bottles );
//               ^
...