2013-04-06 2 views
0

Итак, я пишу программу, которая считывает входные данные из файла и помещает их в массивы. Я пытаюсь использовать указатели с массивами, поэтому я могу указать на определенное место в массиве и добавить определенный float в float, который уже существует.Необходима помощь с указателями и массивами

Это мой код до сих пор:

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

    int menu1(); 

    int main() 
    { 
     FILE * ifp = fopen("input2.txt","r"); //Open the input file 
     int cars = 5, i , j, k; // Initialized cars and counters i, j, and k 
     char *VIEW="VIEW", *BID="BID", *CLOSE="CLOSE", choice1[20]; //Initialize character arrays 
     float START_BID[5]={0.00}, MIN_BID[5]={0.00}, CUR_BID[5]={0.00}, USR_BID[5]=0.00}; 
     int compareLimit = 100, selection=0; 

     //Scan the file and appropriate the numbers into their respective arrays 
     for (i = 0; i < cars; i++) 
      { 
       fscanf(ifp, "%f %f", &START_BID[i],&MIN_BID[i]); 
      } 


     printf("Welcome to the Silent Auction\n\n"); 
     menu1(); //Display the menu 
     scanf("%s", &choice1); // 



     int result = strncmp(choice1, VIEW, compareLimit); //Compare two strings 
     if(result == 0) 
     { 
      selection = selection + 1; 

     } 


     int result2 = strncmp(choice1, BID, compareLimit); //Compare two strings 
     if(result2 == 0) 
     { 
      selection = selection + 2; 

     } 

     int result3 = strncmp(choice1, CLOSE, compareLimit); //Compare two strings 
     if(result3 == 0) 
     { 
      selection = selection + 3; 
     } 


     while (selection < 3) 
    { 
      if (selection == 1) 
      { 
       printf("Number\tCurrent Bid\tMinimum Increase\n"); 
       printf("1\t$%.2f\t\t$%.2f\n",CUR_BID[0], MIN_BID[0]); 
       printf("2\t$%.2f\t\t$%.2f\n",CUR_BID[1], MIN_BID[1]); 
       printf("3\t$%.2f\t\t$%.2f\n",CUR_BID[2], MIN_BID[2]); 
       printf("4\t$%.2f\t\t$%.2f\n",CUR_BID[3], MIN_BID[3]); 
       printf("5\t$%.2f\t\t$%.2f\n",CUR_BID[4], MIN_BID[4]); 

       menu1(); 
       scanf("%s", &choice1); 
      } 


      else if (selection == 2) 
      { 
       int k; 
       float usr_bid; 

       printf("Which auction would you like to bid on? (1-5)\n"); 
       scanf("%d", k); 

       if (CUR_BID[k - 1] = 0.00) 
        MIN_BID[k - 1] = START_BID[k - 1]; 
       else 
        MIN_BID[k - 1] = CUR_BID[k - 1] + MIN_BID[k - 1]; 

       printf("The minimum bid is %.2f\n", MIN_BID[k - 1]); 
       printf("How much would you like to bid?\n"); 
       scanf("%f", usr_bid); 

       if (usr_bid < MIN_BID[k-1]) 
        printf("Sorry, that bid is not high enough.\n"); 
       else 
        CUR_BID[k - 1] = usr_bid + CUR_BID[k - 1]; 

       menu1(); 
       scanf("%s", &choice1); 
      } 

      else 
      { 
       int i; 
       int auction = 1; 

       for (i=0; i < cars; i++) 
       { 
        for (auction = 1; auction < cars; auction++) 
        { 
         while (CUR_BID[i]!= 0.00) 
          printf("Auction %d sold for $%.2f", auction, CUR_BID); 

        } 
       } 
      } 
    } 



      fclose(ifp); 



     return 0; 
    } 


    int menu1() 
    { 
     printf("Please make a selection (In all caps):\n"); 
     printf("\tView Auctions [VIEW]\n"); 
     printf("\tBid on an Auction [BID]\n"); 
     printf("\tClose Auctions [CLOSE]\n"); 

    } 

Моя программа работает до цикла в то время, когда else if (selection == 2) есть. Он спрашивает, какой аукцион я хочу. И когда я даю ему номер, он просто зависает, падает и не дает никаких ошибок, кроме Process terminated with status -1073741510.

Любые идеи?

+1

Поскольку 'menu1()' не возвращает значение, оно должно быть объявлено и определено с помощью типа возврата 'void'. Кроме того, ваш компилятор должен предупредить вас об этом - какие другие предупреждения вы игнорируете? –

+0

Мой компилятор не дает мне никаких предупреждений прямо сейчас. – Drieke

+0

Итак, это будет просто 'int menu1 (void);'? – Drieke

ответ

2

Указатели, которые вы передаете scanf(), являются неверными.

Изменение:

scanf("%d", k); 

в

scanf("%d", &k); 

и изменения:

scanf("%s", &choice1); // 

к

scanf("%s", choice1); // 

в двух местах.

+0

Итак, я сделал эти изменения, и теперь, когда я пытаюсь использовать опцию 'bid' в меню, он продолжает поднимать цикл' if (selection == 1). – Drieke

+0

@Drieke Потратьте время на отладку своей программы. Если вы не знаете, что это значит, узнайте ... есть много ссылок на то, как отлаживать. –

+0

Хорошо, я обнаружил, что в первый раз он запрашивает у меня выбор, его перед циклом while. В других случаях он запрашивает, внутри внутри цикла while, поэтому выбор не изменяется. Вы знаете, есть ли способ изменить значение 'selection' изнутри цикла while? Мне нужно быть в состоянии идти туда и обратно и уходить, когда захочу. – Drieke

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