ошибка компиляции в пользовательском вводе c - PullRequest
1 голос
/ 31 января 2012

Мне нужно написать программу, которая спрашивает пользователя, мужчина это или женщина, есть день рождения (мм дд гггг) и затем дата.и затем вычисляет возраст для страховки, которая предназначена для цикла if else, чтобы сообщить пользователю, какую цену они будут платить.вот мой код:

#include<stdio.h>
#include<conio.h>


char* calculateAge(int month, int day, int year, int birthmonth, int birthday, int      birthyear, char gender)
{
    int temp;
    temp = (year - birthyear);
    if (temp >= 33 && <= 62 && gender == 'm' || temp >= 30 && <= 62 && gender == 'f') {
        return "The rate class is: Best rate  - $40.00 per day or $200.00 per week.";
    } else if (temp >= 25 && <= 29 && gender == 'f') {
         return "The rate class is: Risk rate 1 - Best rate plus $10.00 per day or best     rate plus $55.00 per week.";
    } else if (temp >= 25 && <= 32 && gender == 'm') {
            return "The rate class is: Risk rate 1 - Risk rate 1 plus $7.00 per day or risk rate 1     plus $30.00 per week.";
        } else if (temp >= 66 && gender == 'm' || temp >= 63 && gender == 'f') {
             return "The rate class is: Best rate plus $2.00 for each year over age 66 (male) or 63    (female), per day or best rate plus $5.00 for each year over age 66 (male) or 63 (female), per     week."
    } else {
        return "Sorry, the renter is not 25 years of age or older.";
    }
}

void main() {
int month, day, year, birthmonth, birthday, birthyear;
char gender;
printf("\nWelcome to the car renter’s rate finder. " );
printf("\nPlease enter today's date (mm dd yyyy): ");
scanf("%d%d%d",&month, &day, &year);
printf("\nPlease enter the renter’s gender (m/f):" );
scanf("%c", &gender);
printf("\nPlease enter the renter’s date of birth (mm dd yyyy):");
scanf("%d%d%d", &birthmonth, &birthday, &birthyear);
printf("\n Thank you.");
printf("%s", calculateAge(month, day, year, birthmonth, birthday, birthyear, gender));
return 0;
}

я продолжаю получать эти ошибки, говоря: строка 14: ошибка: ожидаемое выражение перед '<=' строка токена 16: та же строка 18: та же строка 22: ошибка: ожидается;»до '}' токен </p>

Я не понимаю этих ошибок, может кто-нибудь помочь мне с этим программированием?вот вывод, который он должен иметь:

Welcome to the car renter’s rate finder.

Please enter today’s date (mm dd yyyy): 1 23 2008

Please enter the renter’s gender (m/f): m

Please enter the renter’s date of birth (mm dd yyyy): 6 9 1983

Thank you.

Sorry, the renter is not 25 years of age or older.

Welcome to the car renter’s rate finder.

Please enter today’s date (mm dd yyyy): 1 23 2008

Please enter the renter’s gender (m/f): f

Please enter the renter’s date of birth (mm dd yyyy): 2 23 1980

Thank you.

The female renter is 27 years old.

The rate class is: Risk rate 1 - $50.00 per day or $255.00 per week.

Ответы [ 4 ]

3 голосов
/ 31 января 2012

Когда компилятор выдает сообщения об ошибках, самый надежный метод - запуск с первого сообщения об ошибке first . (Иногда сообщения могут создаваться не по порядку; в этом случае начинайте с того, которое относится к наименьшему номеру строки в вашем коде.)

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

Судя по полученным сообщениям об ошибках, вы, вероятно, используете gcc. Когда я компилирую ваш код, первое сообщение, которое я получаю:

c.c: In function ‘calculateAge’:
c.c:9:23: error: expected expression before ‘<=’ token

Строка 9:

if (temp >= 33 && <= 62 && gender == 'm' || temp >= 30 && <= 62 && gender == 'f') {

и столбец 23 - первый оператор <=.

Как это происходит, это конкретное сообщение точно говорит вам, в чем проблема (вам нужно выражение до <=), но в случаях, когда само сообщение неясно, рассматривайте его как признак того, что есть что-то неправильно в том месте, куда он указывает, или, может быть, немного перед ним (скажем, в предыдущей строке).

Исправьте эту ошибку, перекомпилируйте и сделайте то же самое с первой ошибкой, сообщенной в новой версии файла.

Поскольку вы лучше понимаете язык и свой компилятор, вы сможете понять, что он делает, и исправить сразу несколько ошибок. Но пока исправление одной ошибки за раз является хорошим подходом.

Некоторые другие примечания к вашему коду:

Удалить эту строку:

#include<conio.h>

Это непереносимо, и вы все равно не используете ничего из <conio.h>.

void main() неверно; должно быть int main(void).

0 голосов
/ 31 января 2012

Ваша проблема в выражении temp >= 25 && <= 29.Я думаю, что вы хотели написать temp >= 25 && temp <= 29

0 голосов
/ 31 января 2012

Вам не хватает точки с запятой в одном из операторов return. Самая длинная строка текста не имеет точки с запятой в конце.

0 голосов
/ 31 января 2012

Вы пропускаете операнды в различных сравнениях:

 if (temp >= 33 && <= 62 && ...

Здесь, например, вы должны были написать

 if (temp >= 33 && temp <= 62 && ...

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...