문자열 체크 성공이에요.. 그런데~

NamSa의 이미지

다음 처럼하면..

문자열이 들어왔을때는 재입력을

받도록 되는데..

범위지정을 할수 가없네요..

100에서 0사이의 문자가 들어올경우 브레이크시키도록

Quote:

#include <stdio.h>

main()
{
char a;
int i,c;
while(1){
scanf("%s",&a);
for(i=49;i<=57;i++){

if(a==i)
c=1;
}
c=(int)a;
if(c==1)
break;

}
}

ixevexi의 이미지

죄송한데요 -_-;;

지금 보고계시는 책이 있는지요?
책을 한번 정독하시고 프로그램을 짜보시는게 좋을듯 합니다.
저도 C는 잘 모르지만

코드가 좋지 않습니다.

char a;로 선언한후
scanf("%s",&a) 를 쓰시다니요........
scanf함수 부분만이라도 정확히 보시고 코딩을 하세요
전의 문제도 %d로 문자열을 받아서였던것 같은데요...

또한 위의 코드로는 절대 break가 걸리지 않습니다.
딱 한경우 빼고요
(int)a가 1인 경우요....
if문 바로 위에 c값에 (int)a를 대입하고
그걸 검사하다니요 1값은 SOH로서 -_-;;.........
아무리 보아도 원하는 형태의 프로그램같지 않습니다.

또한 중간에 a값을 받아서 49~ 57사이의 값과 비교하는 것보다는
직접 a값이 49와 57사이에 있는지 두번 비교하는 것이 훨씬
좋은 방법이겠죠?
아마 원하시는 코드는


#include<stdio.h>

int main()
{
    char a;
  


    while(1)
    {
         scanf("%c",&a);
         if( (a>=49)&&(a<=57)
            {printf("%c\n",a); return 0;}
    }
}

일것이라 추측이 됩니다만....

C++, 그리고 C++....
죽어도 C++

lsj0713의 이미지

혹시 원하시는게 1~100 사이의 숫자를 입력 받는데, 범위 밖의 값이나 문자열이 입력되면 다시 입력값을 받는 코드입니까? 그렇다면 다음과 같은 방식을 추천합니다.

int i;
while ( 1 )
{
    char buf[255];
    printf("Input number (1 ~ 100) : ");
    scanf("%s", buf);
    if ( sscanf(buf, "%d", &i) == 1 && ( i >= 1 && i <= 100 ) ) { break; }
    printf("\nError!\n");
}

sscanf 함수를 사용하는게 맘에 안드시면 해당하는 함수를 직접 만드는 방법도 있겠지요. 그러나 저라면 sscanf 함수의 효율성을 믿겠습니다.

NamSa의 이미지

감사합니다..

참고로 .. 저위의 .. 브레이크문도..

제기능을.. 수행합니다~~

정태영의 이미지

nan1004au wrote:
감사합니다..

참고로 .. 저위의 .. 브레이크문도..

제기능을.. 수행합니다~~

혹시 이 아래의 이 코드에서의 break문이 정상적으로 제 기능을 수행한단
말인가요..? 그럴리가요..?

#include <stdio.h>

main()
{
	char a;
	int i, c;

	while(1){
		scanf("%s",&a);
		for(i=49;i<=57;i++){
			if(a==i)
				c=1;
		}
		c=(int)a;
		if(c==1)
			break;

	}
} 

1. scanf("%s", &a ); a는.. char이고.. 포인터를 넘겨주긴 했으니 -_-;;
뭐 동작을 할겁니다.. 실제로.. char a라고 한다고 정말 딱 1바이트만..
할당하는건 아니니..

하지만.. 문장을 좀 길게 넣으면 segment fault 를 만날 수 있을 듯 싶군요...

2. c=(int)a; 이걸 무슨 의미로 사용하셨는지 궁금해지는군요 ;) 설마.. 저렇게 해서.. a에 있는 아스키코드값에 해당되는 값이 숫자로 변환되게 하려는 의도는 아니었길 빕니다..

3. if( c == 1 ) break; 흠 바로 위에서 c = (int) a; 를 하셨으니.. 입력값중 첫번째 value가.. asc코드로 1을 가져야겠군요.. 그건.. 평범한 방법으로는 입력할 수 있는 값이 아닐 듯 합니다 :D

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

jachin의 이미지

제가 이런말씀 드리면 안되겠지만...

-_-;;; 보고 있으려니 가슴이 아파서요...

C언어 공부 열심히 하세요. T-T

아마도 숫자 입력 외에는 입력을 받지 않도록 하는 프로그램을 작성하시려고 하신듯 하네요... 그리고 최대 100까지 입력을 받도록 하시는 건가요? 2자리 숫자까지?

흐으음... ( - -)a 조금 난감하네요.

NamSa의 이미지

ㅠ,.ㅜ 아직 자세히 모르면서 ..
이것 저것 짜볼려고 하니..
기본부터 꾸준이 쌓아야 겟어요..
한권의 책을 여러본 보는게 낳을까요?
여러권의 책을 두루 보는게 낳을까요?

ixevexi의 이미지

C의 기본은 그동안 여러번 언급되었지만

The C Programming Language 2nd edition 한권이면 되구요

이책을 바로 보기 힘드시다면
Teach your self C <- 가장 쉽지 않을까요?
A book on C <- 약간 어렵지만 책을 많이 안사도 될듯 합니다.

이 정도면 될듯 합니다.

특히 A book on C는 다양한 연습문제들이 더욱 단련시켜줄 것입니다.
그거 다 보고 액기스로 저 TCPL을 보면 문제가 없습니다

C++, 그리고 C++....
죽어도 C++

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.