미치겠습니다. (배열관련)
SchokoHolic
질문 제목 : 배열관련 문제에서왜 이상한 결과가 나는지 모르겠습니다. 질문 내용에 기제하겠습니다.
질문 내용 :#include stdio.h
#include string.h
int main(void)
{
char eng[10] = {0};
int i = 0;
printf(이 프로그램은 문자열을 입력받아(영어) 대소문자를 서로 변경해 주는 프로그램입니다. \n);
printf(문자열을 입력해주세요. \n);
fflush(stdin);
scanf(%s,eng); //eng라는 char형
fflush(stdin);
/* 처음에 문자 확인을 위해 처음 for를 이용해 모든 문자열을 돌리고, 돌렸을때 if를 이용해 수가
대문자인지 소문자인지 확인한다음, 대소문자를 바꿔준다 */
for(i = 0; i = 40; i++){
if(eng[i] = 65 && eng[i] =90 ){
printf(%c,eng[i]+32);
}
else if(eng[i] = 97 && eng[i] = 122){
printf(%c,eng[i]-32);
}
}
}
우선 소스를 보시면 제가 대문자나 소문자를 입력 받았을 때 이것을 소문자나 대문자로 바꿔서 출력하는 프로그램을 작성하였습니다. 그런데 이 소스를 작성하고나서 문자를 입력하고 엔터를 치면 문자를 입력한데까지 대/소문자로 바꿔서 출력하는 것은 확인이 됩니다. 그런데 문제는 그 다음부터입니다. 만일 asdffsaf로 바꿨을 때 asdffsaf로 바꿔지고 나서 뒤에 또 dvalm 과 같은 문자가 붙어서 출력되었습니다.
즉 asdffasfdvalm 과같은 결과가 출력되었습니다.
그래서 제가 생각했을 때 엔터도 scanf에서 입력되는것이라고 생각해서 fflush(stdin) 을 남용함에도 불구하고 값은 그대로였습니다.처음 c를 배우는 입장으로서 당황스럽네요
고수님들 부탁드립니다.
-
꿈
너무 감사합니다. 좋은 참고가 되었어요 ~~~~~~~~~
-
크나
asdffsaf 는 선언된배열의 개수 10개를 못채우기때문에
나머지 공간에 쓰레기값이들어갑니다.
또한 for(i = 0; i = 40; i++) 이부분에서 배열의 개수를 초과하는 오류가 발생하게됩니다.
(배열의 공간은 10, i의 값은 40)
그러니 for문안의 i의 범위를 10으로 해주시고,
char eng[10] = {0};
이부분을 char eng[10]= {0,};
이렇게 해주시면 모든 배열을 0으로 초기화해주게됩니다.