[완료] C 언어 삼항연산자 부분에서
글쓴이: wowns0224 / 작성시간: 화, 2011/04/26 - 12:52오후
1 #include<stdio.h> //stdio.h라는 헤더파일을 포함시킨다. 2 3 int main(void) //main함수 시작 4 { 5 char ch4[9]; //ch4라는 문자열 변수 선언 6 char ch5[10]; //ch5라는 문자열 변수 선언 7 int si; //si라는 int형 변수 선언 8 int s; //s라는 int형 변수 선언 9 10 printf("이름 입력:"); //이름 입력을 출력 11 scanf("%9s",ch4); //문자열 4개를 받아서 ch4에 저장 12 13 printf("학번 입력:"); //학번 입력 출력 14 scanf("%d",&si); // 10진수 정수를 받아 면수 si에 저장 15 16 printf("성별 입력(남자:1, 여자:2):"); //성별 입력(남자:1, 여자:2)출력 17 scanf("%d",&s); //10진수 정수형 데이터를 받아 변수 s에 저장 18 19 ch5 = (s == 1) ? "남자" : "여자"; //만약s가 1이면 ch5에 남자를 대입하고, 그렇지 않으면 여자를 대입 20 printf("%9s\t%9s\t%9s\n","이름", "학번", "성별"); //이름 학번 성별을 각각 출력 21 printf("%11s\t%13d\t%9s\n",ch4, si, ch5); //ch4와 si,ch5에 저장되있는 값을 출력 22 23 return 0; //0 반환 24 }
ch5 = (s == 1) ? "남자" : "여자"; //만약s가 1이면 ch5에 남자를 대입하고, 그렇지 않으면 여자를 대입
이부분에서 에러가 나는데요..
조언좀.. 부탁드립니다./
Forums:
ch5 = "남자" ; 도 해보시고, strcpy도
ch5 = "남자" ;
도 해보시고, strcpy도 참고하시고..
문자 배열(ch5)에 문자열 포인터("남자",
문자 배열(ch5)에 문자열 포인터("남자", "여자" 문자열 상수의 주소)를 저장하려고해서 그래요.
char ch5[10];를 char *ch5로 변경해보세요.
——
———
Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -
그게 이미 해봣는데ㅔ 안됩니다.
이미 해봤는데 안됩니다.
컴파일 환경이 어떻게 되나요?
컴파일러 버전과 사용하는 운영체제 알려주세요.
컴파일러 에러 메시지도 알려주세요.
자기 문제를 잘 설명하는 것도 능력이에요^^
저는 gcc version 4.5.1에서 문제 없이 컴파일되고 실행되었습니다.
——
———
Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -
Windows XP
WinXP에 VC++ Express 2008 입니다.
에러메세지는
-----------------------------------------------------------------------------------------------
1>------ 빌드 시작: 프로젝트: 20110425_homework, 구성: Debug Win32 ------
1>컴파일하고 있습니다...
1>20110425_homework.c
1>c:\documents and settings\administrator\my documents\visual studio 2008\projects\20110425_homework\20110425_homework\20110425_homework.c(11) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 'scanf' 선언을 참조하십시오.
1>c:\documents and settings\administrator\my documents\visual studio 2008\projects\20110425_homework\20110425_homework\20110425_homework.c(14) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 'scanf' 선언을 참조하십시오.
1>c:\documents and settings\administrator\my documents\visual studio 2008\projects\20110425_homework\20110425_homework\20110425_homework.c(17) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 'scanf' 선언을 참조하십시오.
1>c:\documents and settings\administrator\my documents\visual studio 2008\projects\20110425_homework\20110425_homework\20110425_homework.c(19) : warning C4047: '=' : 'char [10]'의 간접 참조 수준이 'int'과(와) 다릅니다.
1>c:\documents and settings\administrator\my documents\visual studio 2008\projects\20110425_homework\20110425_homework\20110425_homework.c(19) : error C2106: '=' : 왼쪽 피연산자는 l-value이어야 합니다.
1>빌드 로그가 "file://c:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\20110425_homework\20110425_homework\Debug\BuildLog.htm"에 저장되었습니다.
1>20110425_homework - 오류: 1개, 경고: 4개
-----------------------------------------------------------------------------------------------
이렇게 되어있습니다.
결과 첨부합니디.
성별 부분이 이상하게.....^^;
음 ..
empty2fill 님이 답을 말씀하셨네요..
위의 ch5 는 array name 으로, constant pointer 로 취급되기 때문에..
여기에는 값을 assign 할 수 없습니다.
즉, 에러 메시지에 나온대로 l-value 로 쓸 수 없다는 뜻이죠.
const char *ch5; 와 같이 pointer 변수로 바꾸고 다시 빌드해 보세요.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
에러의 원인이 삼항연산자는 아닌 것 같은데... 다시
에러의 원인이 삼항연산자는 아닌 것 같은데... 다시 잘 연구해 보셔요 :)
세벌 https://sebuls.blogspot.kr/
한글 말고 다
영어로 했을 때도 에러가 나나요?
결과
보시는 바와 같이 성별 부분에서 이상하게 출력이 됩니다.
이렇게 하면.....
ch5 == (s == 1) ? "남자" : "여자";
이렇게 써주게 되면 컴파일이 되긴합니다만......
위에 제가 결과 스샷 올려 놓은 것과 같이 이상한 값이 출력됩니다.
char *ch5;
char *ch5;
댓글 달기