#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main() {
char word[30];
int length;
bool isPalindrome = true;
scanf("%[^\n]s", word);
length = strlen(word);
int begin = 0;
int end = length - 1;
int ret1 = strcmp(&word[begin], " ");
int ret2 = strcmp(&word[end], " ");
while (begin < end) {
if (ret1 == 0) {
while (ret1 == 0) {
begin++;
ret1 = strcmp(&word[begin], " ");
}
}
if (ret2 == 0) {
while (ret2 == 0) {
end--;
ret2 = strcmp(&word[end], " ");
}
}
if (word[begin] != word[end]) {
isPalindrome = false;
break;
} else {
begin++;
end--;
}
ret1 = strcmp(&word[begin], " ");
ret2 = strcmp(&word[end], " ");
}
printf("%d\n", isPalindrome);
return 0;
코딩을 작성했는데 공백과 입력한 값의 공백을 비교하려고 해도 ret 값이 0이 나오질 않습니다. 중간에 뭐가 잘못된 건가요? 그리고 프로그램을 실행하려고 하면 자꾸 word 앞에 '&'를 넣으라고 하는데 이건 무슨 차이가 있는 건가요? 현재 mac os Xcode 에서 작성 중입니다.
문의한 코드의 끝에 }가 빠졌습니다.
이전 문의와 중복되는 부분은 다음 답변을 참고하세요.
https://dojang.io/mod/forum/discuss.php?d=311&parent=726
word에 &를 사용하는 문제는 다음과 같습니다.
word는 배열입니다. 따라서 word는 주소를 가리킵니다.
word[0]은 배열의 첫 번째 인덱스 0에 있는 값을 가리킵니다.
따라서 word[0]은 주소가 아니라 값입니다.
strcmp 함수는 값이 아니라 값이 있는 주소를 인수로 받습니다. 따라서 word[0]의 주소를 전달해야 합니다. 주소는 &를 앞에 붙입니다.
따라서 strcmp 함수에서는 &word[0]처럼 써야 합니다.
word[인덱스] -> 값에 접근한다
&word[인덱스] -> 해당 값의 주소에 접근한다
함수가 원하는 인수가 값인지, 주소인지에 따라 선택해서 사용하면 됩니다.