2013-03-23 3 views
0

Я начинаю с нескольких часов опыта, и я пытаюсь сделать очень простую программу, чтобы познакомиться с командой IF. Я придумал этот код:Код «должен» работать, но программа перестает работать

#include<stdio.h> 

int main() 
{ 
    char ans; 
    char n; 
    char y; 
    printf("Do you want to exit?\n"); 
    scanf("%c\n",ans); 
    if (ans == y) 
    { 
     printf("As you wish!\n"); 
     return 0; 
    } 
    else (ans == n); 
    { 
     printf("You'll exit anyways!\n"); 
     return 0; 
    } 
} 

Я думаю, что он должен работать, но после того, как я набираю что-то, программа перестает работать! Заранее спасибо!

+0

'n' и' y' никогда не устанавливаются в фактическое значение - если вы хотите сравнить их с 'ans', вы будете нужно сделать что-то вроде 'char n = 'n';' – Hannele

+0

'if' не является командой, это инструкция. C не имеет «команд». – 2013-03-23 13:56:33

+0

'scanf ("% c \ n ", &ans);' – wildplasser

ответ

3
else (ans == n); 

Это не дает ожидаемых результатов. Удалите ; и состояние. else может принимать только код. Он не справляется с условиями. Если вы хотите условия, используйте else if:

else if (ans == 'n') 

Дополнительные ошибки:

if (ans == y) 

у здесь относится к переменной, которая объявлена, но не имеет никакого значения. Конечно, вы хотите обратиться к персонажу 'y':

if (ans == 'y') 

Кроме того, scanf ожидает указатель, так что вместо ans, используйте &ans. Необходимо записать на адрес памяти значения. Он не заботится о ценности. В конце концов вы узнаете о указателях. (Предполагая, что вы не прошли через них в течение нескольких часов опыта)

+0

« Это не компилируется ». -> Почему? – md5

+0

else ожидает тело: v –

+0

@ Magtheridon96:' ; 'это действительный оператор. Это не то, что OP хотел написать, но это * правильно C *. – md5

9

The

if (ans == y) 

следует читать

if (ans == 'y') 

Бывший сравнивает ans к значению переменной неинициализированного y, в то время как последние проверки ans содержит ли характер 'y'.

То же самое касается 'n'.

Переменные y и n не нужны и могут быть удалены.

Кроме того, следующая строка неверна:

else (ans == n); 

Он должен читать

else if (ans == 'n') 

Наконец, (я добавил if и удалили точку с запятой.) scanf() следует читать:

scanf("%c",&ans); 
+0

'else (ans == 'n '), 'синтаксически действителен, он просто анализирует иначе, чем хочет OP. –

+0

@R .. Точка принята – NPE

2

Существуют три основные ошибки.

  • Вы должны пройти указатели функции scanf, так что вы должны добавить амперсанд перед тем ans (&ans).

  • В конце заявления else есть завершающий ;.

  • y относится к переменной (которая не существует), в то время как вы хотите сравнить ans против характера'y'.

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