Итак, я новичок в программировании на C. Я использую Vim в качестве редактора и GCC в качестве компилятора, но он работает неправильно. Допустим, я делаю базовую программу, чтобы определить, четное или нечетное число. Вот мой код:
#include <stdio.h>
int main(int argc, char argv[])
{
int i;
printf("Enter a number: ");
scanf("%d\n", &i);
printf("%d\n", i);
if(i % 2 == 0)
{
printf("Your number is even.\n");
}
else if(i % 2 != 0)
{
printf("Your number is odd.\n");
}
else
{
printf("Invalid input.\n");
}
getchar();
return 0;
}
Я не уверен, что я программирую неправильно, или GCC просто плохой компилятор, или что-то в этом роде. Я использую Linux, в котором я выполняю двойную загрузку с Windows. Теперь я нажимаю CTRL - D , чтобы остановить процесс, и только после этого он распечатывает мне мой номер и сообщает, четный он или нечетный. Дело не только в этом, похоже, что многие другие программы с похожими форматами делают это.
~ $ ./test
Enter a number: 45
45 //I press enter, nothing happends. Ctrl-d
Your number is even. //ctrl-d again
~ $
Я не уверен, программирую ли я эту несправедливость, или gcc является просто не хорошим компилятором, или что бы то ни было.
Первый: scanf("%d\n", &i);
должен быть scanf("%d", &i);
.
Также другие ошибки:
main()
должно быть литым или к указателю на массив символов или к указателю на указатель на символ: char *argv[]
или char **argv
;i
не число, это все еще будет литым к целому числу оба в if(i % 2 == 0)
и else if(i % 2 != 0)
для выражения, которое будет оценено (на самом деле Вы никогда не будете добираться до else
блок с помощью того кода, как также if(i % 2 == 0)
или else if(i % 2 != 0)
, быть i
неявно литой к целому числу, оценит к истинному). Имейте чтение в этом для более надлежащих способов проверить, является ли строка числовой.А-ч, какого черта. Я попробую отвечать на это во всяком случае.
Короткий ответ: удалите \n
от аргумента до scanf. Когда я делаю это, Ваш код ведет себя как ожидалось (хорошо, чтобы быть дотошным, я также должен был измениться argv[]
в *argv[]
.)
Более длинный ответ: Вы никогда не должны действительно использовать scanf; это обычно получает Вас в проблему.
Хм... мой более длинный ответ был короче, чем мой короткий ответ. А-ч хорошо.