[아직초보] 문자열 비교해서 메세지 뿌려줄때...
글쓴이: khaic0c0 / 작성시간: 목, 2003/05/15 - 9:09오후
아래 소스는 문자열을 두개 받아서 비교한다음에 결과를 알려주는 간단한건데요.
자꾸 else 에 있는값만 나오내요...
어케 하면 두개 비교해서 두개의 값이 같다 첫번째 문자열이 더 크다, 두번째 문자열이 더 크다 라는 메세지를 줄수 있을까요?
그리고 gcc 로 컴파이하는데 scanf 대신 gets 사용하면 에러나내요.. 원래 unix 에서는 gets 함수 사용못하나봐요?
#include <stdio.h> int Sam(char first[],char second[]); int main(void) { int result; char first[80],second[80]; printf("First String input : "); scanf("%c",&first); printf("Second String input : "); scanf("%c",&second); result = Sam(first,second); if(result == 0){ printf(" sam sam~~~\n"); }else if(result > 0){ printf(" first is the more\n"); }else{ printf(" second is the more\n"); } return 0; } int Sam(char first[],char second[]) { int x; for(x=0 ; first[x] == second[x] ; x++){ if(first[x] == '\0'){ return 0; } } return first[x] - second[x]; }
즉,,
위에 소스 보시면 아시겠지만. first 와 second 라는 변수를 둬서 그값에 문자열을 입력 받게 한다음에.
Sam 이라는 함수를 이용해서 문자열 이 몇개인가 검사하고 문자열만큼 개산한다음에...
그 리턴값이 0이면 문자열이 같은거고 first[x]값이 크냐 작으냐를 물어서 비교를 해주는건데요...
어떻게 하면 제대로 된 결과를 뿌려줄수 있을까요?
Forums:
걍 For문 돌리면 안되나요???
for (어쩌구)
{
if (scr[i] - dest[i] != 0)
return false;
}
이럼 안되나요?? 그전에 scr이랑 dest랑 글자수랑 대소문자 비교부터 해주고
이렇게 하면 될듯 한데...
문자열 비교하는 함수가 좀 이상하구요..그리고 gets() 쓸수 있습
문자열 비교하는 함수가 좀 이상하구요..
그리고 gets() 쓸수 있습니다..
scanf()가 잘못쓰여진것 같네요
그냥.. strcmp()쓰면 안되나요?
혹시나 했는데 그건것 같습니다. 잘안된다고 하셨는데어떻게 안되는지
혹시나 했는데 그건것 같습니다. 잘안된다고 하셨는데
어떻게 안되는지 적어주시면 좀 보는사람이 편할듯하네요..
혹시 입력하자마자 first is th more란 메시지가 나오기때문
이시라면 프로그램을 scanf로 바꾸시면서 잘못 되신것 같습니다..
리눅스에서 코딩하신다면 man gets 해보시면 해당 함수가 있음을
알수 있습니다. 도움글도 나오니 확인하시고 사용하시기 바랍니다.
scanf라 진짜 오랜만에 보는군요 -_- 저도 넘 오랜만에 봐서
긴가 민가했습니다.. %c를 쓰시면 한바이트의 케릭터 문자밖에
받지 못합니다. 특히 a하고 엔터치면 그순간 두굴자입니다..
엔터도 하나의 문자이기때문에 -_- 그래서 그냥 종료 되는겁니다..
scanf도 사용법을 한번 다시 확인하시길..
앗 맞나 아직도 긴가민가 -_- 씨 공부하시지 말고 씨++ 책을보십시요
요즘은 cout이나 cin쓰는데 ㅡㅡㅋ
' 형식이 내용을 규정한다. '
[quote]앗 맞나 아직도 긴가민가 -_- 씨 공부하시지 말고 씨++
이건 좀 아닌거 같네요
C 가 적합한 곳도 있고
C++ 이 적합한 곳도 있지않겠습니까..
그리고 printf, scanf을 cout, cin으로 바꿔 쓴다고
C++이 되는건 아니잖아요;;
코드를 보니 아직 포인터에 대한 개념이 확실이 잡히지 않은 것 같습니다.
코드를 보니 아직 포인터에 대한 개념이 확실이 잡히지 않은 것 같습니다.
만약 scanf 의 두번째 인자는 포인터(주소)이어야 하는데 지금 코드를 보면
포인터가 아닌 포인터의 포인터가 들어가 있습니다.
그리고 gets() 를 썼을 때 나는 메시지는 error message가 아닌 warning message 일 것입니다.
gets() 는 문자열의 끝을 검사를 하지 않기 때문에, 미리 정해 놓은 문자열의
크기를 넘을 수 있다고 경고 메시지를 주는 것입니다.
Have a Learning Mind.
문법상의 오류입니다.
우선 Scanf함수의 사용에 관하여 잘못 알고 계신듯 합니다.
리눅스 시라면 man scanf해보시구요
책을 뒤져보시거나 검색하여 보세요
스트링을 받는데 왜 %c인가요?
그리고 scanf는 변수에 값을 저장할때는 &연산자를 사용하여
주소에 엑세스하여 저장합니다.
지금 배열에 넣고 계십니다 무엇이 틀리셨는지 생각하여 보세요
그리고 문자열을 " == " 로 비교하는것은 옳지 않다고도 생각되어 집니다.
책이나 문서를 참고하시길..
아직 멀었다.. 난 여전히 시작점
아 저기 그리구요..
위에 분도 말씀 하셨지만 코딩으로 보기엔 C같은데..
여러가지 부분에서 C++이 좋기도 하겠지만
전 아직도 C언어를 좋아하고 printf puts같은거 많이 쓰는데
위와 같이 말씀 하시니 섭섭한거 같아요
아직 멀었다.. 난 여전히 시작점
제가 쓴글 지우고 싶어요~~ 어디서 지우죠?
제가 쓴글 지우고 싶어요~~ 어디서 지우죠?
질문을 너무 이상한거 같고... 많이 알아보지 못하고 질문한거 같아..
나중에 다시 질문하려고 하는데..
지울수가 없내요...
원래 지울수 없게 되어 있는건가요?
아니면 지울수 있는데 제가 못찾는걸까요?
지우고 싶은데 어디서 주우는지좀 가르켜주세요~
어딜 가든 필요한 인간되자~~ :-)
댓글 달기