[아직초보] 문자열 비교해서 메세지 뿌려줄때...

khaic0c0의 이미지

아래 소스는 문자열을 두개 받아서 비교한다음에 결과를 알려주는 간단한건데요.

자꾸 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]값이 크냐 작으냐를 물어서 비교를 해주는건데요...

어떻게 하면 제대로 된 결과를 뿌려줄수 있을까요?

gozealot의 이미지

for (어쩌구)
{
if (scr[i] - dest[i] != 0)
return false;
}

이럼 안되나요?? 그전에 scr이랑 dest랑 글자수랑 대소문자 비교부터 해주고

이렇게 하면 될듯 한데...

맹고이의 이미지

문자열 비교하는 함수가 좀 이상하구요..
그리고 gets() 쓸수 있습니다..
scanf()가 잘못쓰여진것 같네요

그냥.. strcmp()쓰면 안되나요?

liongo의 이미지

혹시나 했는데 그건것 같습니다. 잘안된다고 하셨는데

어떻게 안되는지 적어주시면 좀 보는사람이 편할듯하네요..

혹시 입력하자마자 first is th more란 메시지가 나오기때문

이시라면 프로그램을 scanf로 바꾸시면서 잘못 되신것 같습니다..

리눅스에서 코딩하신다면 man gets 해보시면 해당 함수가 있음을

알수 있습니다. 도움글도 나오니 확인하시고 사용하시기 바랍니다.

scanf라 진짜 오랜만에 보는군요 -_- 저도 넘 오랜만에 봐서

긴가 민가했습니다.. %c를 쓰시면 한바이트의 케릭터 문자밖에

받지 못합니다. 특히 a하고 엔터치면 그순간 두굴자입니다..

엔터도 하나의 문자이기때문에 -_- 그래서 그냥 종료 되는겁니다..

scanf도 사용법을 한번 다시 확인하시길..

앗 맞나 아직도 긴가민가 -_- 씨 공부하시지 말고 씨++ 책을보십시요

요즘은 cout이나 cin쓰는데 ㅡㅡㅋ

' 형식이 내용을 규정한다. '

맹고이의 이미지

Quote:
앗 맞나 아직도 긴가민가 -_- 씨 공부하시지 말고 씨++ 책을보십시요

요즘은 cout이나 cin쓰는데 ㅡㅡㅋ


이건 좀 아닌거 같네요
C 가 적합한 곳도 있고
C++ 이 적합한 곳도 있지않겠습니까..

그리고 printf, scanf을 cout, cin으로 바꿔 쓴다고
C++이 되는건 아니잖아요;;

ppangi의 이미지

코드를 보니 아직 포인터에 대한 개념이 확실이 잡히지 않은 것 같습니다.

만약 scanf 의 두번째 인자는 포인터(주소)이어야 하는데 지금 코드를 보면

포인터가 아닌 포인터의 포인터가 들어가 있습니다.

그리고 gets() 를 썼을 때 나는 메시지는 error message가 아닌 warning message 일 것입니다.
gets() 는 문자열의 끝을 검사를 하지 않기 때문에, 미리 정해 놓은 문자열의

크기를 넘을 수 있다고 경고 메시지를 주는 것입니다.

Have a Learning Mind.

havebeen의 이미지

#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];

}

우선 Scanf함수의 사용에 관하여 잘못 알고 계신듯 합니다.

리눅스 시라면 man scanf해보시구요

책을 뒤져보시거나 검색하여 보세요

스트링을 받는데 왜 %c인가요?

그리고 scanf는 변수에 값을 저장할때는 &연산자를 사용하여

주소에 엑세스하여 저장합니다.

지금 배열에 넣고 계십니다 무엇이 틀리셨는지 생각하여 보세요

그리고 문자열을 " == " 로 비교하는것은 옳지 않다고도 생각되어 집니다.

책이나 문서를 참고하시길..

아직 멀었다.. 난 여전히 시작점

havebeen의 이미지

liongo wrote:
-_- 씨 공부하시지 말고 씨++ 책을보십시요

요즘은 cout이나 cin쓰는데 ㅡㅡㅋ

위에 분도 말씀 하셨지만 코딩으로 보기엔 C같은데..

여러가지 부분에서 C++이 좋기도 하겠지만

전 아직도 C언어를 좋아하고 printf puts같은거 많이 쓰는데

위와 같이 말씀 하시니 섭섭한거 같아요

아직 멀었다.. 난 여전히 시작점

khaic0c0의 이미지

제가 쓴글 지우고 싶어요~~ 어디서 지우죠?

질문을 너무 이상한거 같고... 많이 알아보지 못하고 질문한거 같아..
나중에 다시 질문하려고 하는데..

지울수가 없내요...

원래 지울수 없게 되어 있는건가요?
아니면 지울수 있는데 제가 못찾는걸까요?

지우고 싶은데 어디서 주우는지좀 가르켜주세요~

어딜 가든 필요한 인간되자~~ :-)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.