#include <stdio.h>

#include <unistd.h>

int	ft_str_is_printable(char *str)
{
	int	i;
	int	cnt;

	if (str[0] == '\\0')
	{
		cnt = 1;
	}
	i = 0;
	while (str[i] != '\\0')
	{
		if (str[i] >= 32 && str[i] <= 127)
		{
			cnt = 1;
		}
		else
		{
			cnt = 0;
		}
		i++;
	}
	return (cnt);
}
int main() {
    char a[] = "\\t";
    char b[] = "HELLo";

    printf("%d", ft_str_is_printable(a));
    printf("%c", '\\n');
    printf("%d", ft_str_is_printable(b));
    
    return 0;
}

기계채점에서 KO를 당했는데, 알고보니 printable한 아스키 코드 값에 127도 포함이 되어 있었다.

근데 어떤 블로그에서는 다르게 쓴 거 같았는데, 블로그를 함부로 믿으면 안되겠다.

[ascii] printable / unprintable char

#include <unistd.h>

int	ft_strlen(char *str)
{
	int	count;

	count = 0;
	while (str[count] != '\\0')
	{
		count++;
	}
	return (count);
}

int	ft_str_is_printable(char *str)
{
	int	i;
	int	cnt;
	
	if (ft_strlen(str) == 0)
	{
		cnt = 1;
	}
	i = 0;
	while (str[i] != '\\0')
	{
		if (str[i] >= 32 && str[i] <= 126)
		{
			cnt = 1;
		}
		else
		{
			cnt = 0;
      break ;
		}
		i++;
	}
	return (cnt);
}

알고보니 break문을 넣지 않아서 틀렸다. ;;