Я думаю, что вы спотыкаетесь о разнице между возвращаемым значением и errno
.errno
- глобальная переменная, объявленная в errno.h
.То, что вы хотите, это что-то вроде:
#include <stdio.h>
#include <errno.h>
int main(void)
{
char directory[100];
scanf("%[^\n]", directory);
if (chdir(directory) != 0) {
switch (errno) {
case EACCES:
perror("\nError ");
break;
/* ... */
}
}
}
Также немного странно, что в вашем коммутаторе есть куча дел, которые делают одно и то же ... Я предполагаю, что это потому, что они просто заглушки ивы действительно хотите по-разному обрабатывать разные ошибки в своем коде, но если нет, вы можете сбросить переключатель и просто сделать что-то вроде
if (chdir(directory) != 0) {
perror("\nError ");
exit(EXIT_FAILURE);
}