Почему консоль запрашивает дополнительные входные данные? C

#c

#c

Вопрос:

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

 double computeFee(){
    double fee, hour_rate, minute_rate;
    char ride_type, colon;
    int hour_started, minute_started, hour_ended, minute_ended, total_minutes;
    
    cin >> ride_type >> hour_started >> colon >> minute_started >> colon >>  hour_ended >> colon >> minute_ended;
    total_minutes = ((hour_ended * 60)   minute_ended) - ((hour_started * 60)   minute_started);
    
    switch(ride_type){
        case 'J':
            hour_rate = 500;
            minute_rate = 10;
            break;
        
        case 'K':
            hour_rate = 200;
            minute_rate = 5;
            break;
        
        case 'B':
            hour_rate = 100;
            minute_rate = 2;
            break;
        
        case '0':
            return 1;
            break;
    }

    if (total_minutes < 60){
        fee = total_minutes * minute_rate;
    }else{
        fee = ((total_minutes/60) * hour_rate)   ((total_minutes%60) * minute_rate);
    }
            
    return fee;
}

int main(){
    double total, fee;
    
    computeFee();
    fee = computeFee();
   
    cout << fee;
        
    return 0;
}
  

Комментарии:

1. Вы вызываете computeFee() 2 раза. В первый раз вы отбрасываете возвращаемое значение, когда печатаете значение во второй раз. После удаления computeFee(); строки вы можете захотеть напечатать некоторую инструкцию для пользователя, которую он должен ввести.

2. cin >> ride_type будет считан символ новой строки, оставшийся во входном потоке от предыдущего вызова.

Ответ №1:

При каждом вызове computeFee() выполняется код функции. В вашем коде вы вызываете его дважды, поэтому он будет запрашивать у вас входные данные два раза. И учитывая, что при первом вызове вы его не назначаете, первый ввод будет потерян. Чтобы это работало так, как вы хотите, ваш main код должен быть:

 int main(){
    double fee;
    
    fee = computeFee();
   
    cout << fee;
        
    return 0;
}