2012-03-27 3 views
0

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

|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; 
} 

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

+0

Что такое линия 54? –

+0

'prices' не объявлен как массив, и ни один из них не является« заказом » – GWW

+1

Поскольку вы называете себя любителем, некоторые советы по кодированию: во-первых, я хочу, чтобы код каждого был ясен и хорошо прокомментирован! Вы обнаружите, что комментарии наиболее полезны, когда они описывают ваши рассуждения, а не сам код. Можно с уверенностью предположить, что любой, кто читает ваш код, понимает язык; то, что они не могут сделать, это ваши мысли. Также неплохо документировать ваши предположения и ожидания, например: «Мы попадаем сюда, только если у нас закончилось вино». –

ответ

0

Изменить

//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); 
//    ^
1

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

Выньте цены из цикла for и положите их наверху.

Смежные вопросы

 Смежные вопросы