2012-04-18 2 views
0

Привет Я новичок в программировании. Я знаю, как работает функция и оператор if, поэтому я хочу знать, как я мог бы написать оператор ifelse в функции и отобразить ответ пользователю. там не может быть никаких GOTO заявленияФункция с оператором if

код выглядит следующим образом:

if(year < 1583) //considers if a year input is less than 1583 which is the starting year for this calendar 
    { 
     printf("\n\nPlease select a year after 1583 \n\n"); 
     goto YEAR; 
     system("cls"); 
    } 
    if(Leap_year(year))//if statement calls Leap Year function 
    { 
     printf("\t ======================= \n"); 
     printf("\t* THIS IS A LEAP YEAR *\n");  
     printf("\t ======================= \n\n"); 
    } 
    else { 
     printf("\t ======================= \n"); 
     printf("\t* THIS IS NOT A LEAP YEAR *\n"); 
     printf("\t ======================= \n\n"); 
    } 
+0

Я думаю, что вы ищете 'Console.WriteLine'. –

+4

Почему этот помеченный C#? Это похоже на C мне ... –

+0

Извините, я запутался в типе языков c, но это c –

ответ

2

ли это C или C#, вы можете решить эту проблему с помощью while цикла.

do 
{  
     // You need to prompt for year here. Your code doesn't show how you do that. 
     if (year < 1583) 
     { 
      printf("\n\nPlease select a year after 1583 \n\n"); 
      // Note: The user will never see the printf above if you clear the screen right after 
      system("cls"); 
     } 
} while (year < 1583); 
+0

как написать эту часть в виде функции} if (Leap_year (year)) // если оператор вызывает функцию Leap Year funtion { printf ("\ t ============== ========= \ n "); printf ("\ t * ЭТО ПРОДОЛЖИТЕЛЬНЫЙ ГОД * \ n"); printf ("\ t ============================================================================. } else { printf ("\ t ====================================] printf ("\ t * ЭТО НЕ ЛЕТНИЙ ГОД * \ n"); printf ("\ t ============================================================================. –

+0

Что вы подразумеваете под «в форме функции»? Вы хотите отделить этот код от другой функции? –

0

Снимите goto - Добавить еще

т.е.

if(year < 1583) //considers if a year input is less than 1583 which is the starting year for this calendar 
    { 
      printf("\n\nPlease select a year after 1583 \n\n"); 
      system("cls"); 
    } 
    else 
    { 
.... 
+0

И как вы снова запрашиваете ввод? Вам все еще нужна конструкция цикла. –

+0

@ EricJ. Вы действуете на разных предположениях, где находится метка 'YEAR'. (Я склонен согласиться с вашей догадкой.) – trutheality

+0

@EricJ - Не упоминал в вопросе, что требуется повторное приглашение. Просто было другое предположение на ярлык 'YEAR', а формат исходного кода - подразумевал, что у человека отсутствовал оператор' else'. –

1

Решение вы ищете, чтобы использовать больше функций.

Рассмотрим:

// year == -1 means there was an error 
int year = -1; 
while (year != -1) 
{ 
    PromptForYear(); 
    year = GetYear(); 
} 

Этот код работает с GetYear следующим образом:

int GetYear() 
{ 
    int year; 
    cin >> year; 

    // check for bad year values 
    if (year < 1583) 
    return -1; 

    return year; 
} 

И PromptForYear может быть

void PromptForYear() 
{ 
    cout << "\n\nPlease select a year after 1583 \n\n"; 
} 

Лично я бы предпочел метод TryGetYear:

while (true) 
{ 
    PromptForYear(); 
    if (TryGetYear(&year)) 
    { 
    break; 
    } 
} 

// code for TryGetYear 

bool TryGetYear(int* year) 
{ 
    if (year == null) 
    return false; 

    cin >> *year; 
    if (*year < 1583) 
    return false; 

    return true; 
} 
+0

Выражения 'break' недоверчивы в классах программирования (если они не находятся в' switch'). Вместо этого используйте 'do {} while'. Также делает код более понятным (нет необходимости в этом дополнительном 'if'). – trutheality

+0

@ trutheality yep, я был TA, и я всегда чувствовал, что безусловное предпочтение было бесполезным. 10 лет спустя в поле, я все еще чувствую это. Но мне .. что угодно. – payo

+0

У меня нет ничего против операторов break, чтобы разбить циклы, они могут быть очень удобными, когда без них вам нужно будет создать кучу булевых флагов, но в этом случае я думаю, что 'do {} while' на самом деле больше читаемый, чем 'break'. – trutheality

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