#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main()
{
char s1[31];
char s2[31];
int count = 0;
bool b1 = true;
scanf("%[^\n]s", s1);
int i = 0, k = 0;
while (s1[i] != NULL)
{
if (s1[i] != " ")
{
s2[k] = s1[i];
k++;
count++;
}
i++;
}
for (int j = 0; j < count / 2; j++)
{
if (s2[j] != s2[count - 1 - j])
{
b1 = false;
break;
}
}
printf("%d\n", b1);
return 0;
}
이렇게 코드를 짜보았습니다.
심사문제에서 통과가 되지 않고 비주얼 스튜디오에서도 실행은 되지만 1이 나와야 할 때 0이 나옵니다. 그리고 비주얼 스튜디오로 실행하면
1>c:\project\hello\hello\hello.c(15,25): warning C4047: '!=': 'int'의 간접 참조 수준이 'void *'과(와) 다릅니다.
1>c:\project\hello\hello\hello.c(17,25): warning C4047: '!=': 'int'의 간접 참조 수준이 'char [2]'과(와) 다릅니다.
이런 글이 뜨는데 이 글이 왜 뜨는지와 제가 짠 코드 중에 어느 부분이 잘못 된건지 잘 모르겠습니다.
그리고 저 코드가 되지 않자 다르게 코드를 짜봤는데
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main()
{
char s1[31];
int length = 0;
bool b1 = true;
scanf("%[^\n]s", s1);
length = strlen(s1);
for (int i = 0, k = 0; i < length / 2; i++, k++)
{
if (s1[i] != " " && s1[length - 1 - k] != " ")
{
if (s1[i] != s1[length - 1 - k])
{
b1 = false;
break;
}
}
else if (s1[i] == " " && s1[length - 1 - k] != " ")
{
i++;
if (s1[i] != s1[length - 1 - k])
{
b1 = false;
break;
}
}
else if (s1[i] != " " && s1[length - 1 - k] == " ")
{
k++;
if (s1[i] != s1[length - 1 - k])
{
b1 = false;
break;
}
}
else
{
i++;
k++;
if (s1[i] != s1[length - 1 - k])
{
b1 = false;
break;
}
}
}
printf("%d\n", b1);
return 0;
}
이것 역시 심사 통과되지 않고 비주얼 스튜디오에서도 역시 실행은 되지만 1이 나와야 할 때 0이 나오고 '간접 참조 수준~' 이런 글이 뜹니다. 이 코드는 어디가 잘못 된건가요,,,
포럼 상단에 47.5를 넣으면 이전 질문과 답변을 참조할 수 있습니다.
https://dojang.io/mod/forum/search.php?id=2&search=47.5
UNIT 6을 참조해서 디버거를 사용하는 것도 좋은 방법입니다.
또한, 포럼 상단의 시각화 서비스를 이용해서 단계별로 실행하면서 시각적으로 코드의 동작을 이해하는 것도 좋습니다.
첫 번째 코드의 지적 사항을 보면
1>Z:\Project1\Project1\소스.cpp(32,25): error C2446: '!=': 'const char [2]'에서 'int'(으)로 변환되지 않았습니다.
해당 코드는
if (s1[i] != " ")
배열 안의 요소는 문자입니다. 따라서 '로 둘러 싸야 합니다.
문자와 문자열을 정확하게 구분해서 사용해야 합니다.
UNIT 9, 39를 복습하세요.