프로그래밍

 3198, 1/160 회원가입  로그인  
   stingygirl
   (반복문)c언어 문자인지 숫자인지 확인 하는 거 어떻게 만드나요 ?

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6464 [복사]


scanf("%d"...)

만약에 유저가 숫자 말고 문자를 입력 하거나 문자와 숫자를 같이 썼을 때

다시 입력하라고 출력하고 다시 값을 입력 받는 프로그램을 만들려는데 안 되내요

혹시  isalpha 이런 걸 라이브러리 안 쓰고 그냥 만드는 방법은 없나요?

스켄에프가 반복문 안에 있을 때 숫자 대신 알파벳 넣으니까 터져 버리더 라고요.

isalpha 써도 터지내요 어떻게 해야 하나요 ?


아스키코드로 받는 다는 말은 무슨 뜻인가요 ?

그리고  배열 이전에 지식으로 해결 해야 합니다. ㅠㅠ 도와주세요

  Hit : 25806     Date : 2014/06/02 09:37



    
U_SoRang 입력값을 ASCII CODE로 판단하여 대문자, 소문자면 종료하고,
숫자면 실행되게 하시면 될 듯.
2014/06/02  
stingygirl 아스키코드로 어떻게 판단을 하나요 ? 2014/06/02  
stingygirl 그리고 문자열이면 어떻하나요 ㅠㅠ 2014/06/02  
U_SoRang "검색" 2014/06/02  
stingygirl 검색 지금 3시간 째 하는대 못 찾아서 그럽니다 ㅠㅠ 2014/06/02  
stingygirl 몇 시간 째 찾고 있는데 검색 하니까 정말 사람 놀리는 것 처럼 보이내요 2014/06/02  
cd80 숫자의 자릿수제한은 없나요??
배열이전의 지식으로 해결해야한다는 글을 못보고 먼저 코드를 써보긴했는데
배열없이 하는게 배열갖고 하는거보다 좀더 어렵습니다

main(){
int i, number;
char input[20];
number=0;
do{
printf("enter number: ");
fflush(0);
scanf("%s", input);
for(i=0; i<strlen(input); i++){
if( (input[i] < 0x30) || (input[i] > 0x39) ){
printf("non numeric character found!\n");
break;
}
if(i == strlen(input)-1)
number = atoi(input);
}


} while(!number);
printf("Number: %d\n", number);
}
2014/06/02  
cd80 아래는 배열없이 작성해본 코드입니다
배열이 없이 작성하려면 한글자씩 처리해야하기 때문에 조금 더 코드가 복잡합니다

main(){

int i, number=0;
int length = 0;
int found=0;
char input;

printf("Enter number: ");
while(input != -1){
input = getchar();
length++;
if( (input >= 0x30) && (input <= 0x39) ){
number *= 10;
number += input-0x30;
}
else if(input == '\n'){
if(found){
printf("non-numeric char found!\n");
printf("Enter number: ");
found=0;
number = 0;
continue;
}
if(number > 0)
break;
if(length)
printf("Enter number: ");
}
else{
found=1;
length=0;
}
}
printf("Number: %d\n", number);
}
2014/06/02  
cd80 리눅스상에서 작성했습니다~ 2014/06/02  
stingygirl 감사합니다. 아직 코드는 이해 못했지만 확실히 되는 군요 ㅠㅠ 감사합니다ㅠㅠ 2014/06/02  
stingygirl 아직 포인터 전까지 밖에 안 배워서 모르는 개념들이 많내요 ㅠㅠ 포인터 전 까지 가르쳐 줘 놓고 이런 프로그램 작성 해오라는 건 안 배운 걸 써도 된다는 뜻 일까요 ? 2014/06/02  
stingygirl 배열 없이 하는 거에서요 getchar로 12a23을 입력하면 다음 문자로 넘어가는 코드는 어느 부분 인가요 ? 2014/06/03  
cd80 문자의 갯수만큼 루프를 돌면서 하나하나 처리하는거에요
대신에 엔터를 누를때마다 숫자만 입력됐는지 문자도 입력됐는지를 확인하는데
맨처음이 1이니까 1은 숫자니까 number = 1이 되고
다음 2니까 number*=10하면 number=10 여기에 number += 2 하면 number = 12
다음 a는 문자니까 else{에 걸려서 found=1;로 설정해서 엔터를입력했을때 처리할수있게했구요
그다음에 2 3 도 똑같이 처리를 하는데
마지막에 엔터를 누르면
found=1이 설정돼있을경우 number에 상관없이 문자가 입력됐다고 감지하고 다시 처음부터 입력을받게돼요
그리고 엔터를 입력했을때 found=0이고 number가 0이상이면 숫자가 하나이상 입력된거니 while을 종료하구요

그 if(length) 부분은 지우셔도돼요 코딩할때 잘못생각하고 넣은부분이라

저도 코딩하면서 생각했던게 배열도 나가기 전이라고 하면
C언어 자체를 많이안했단거같은데 작성하기 힘든코드가 아닌가싶네요
2014/06/03  
cd80 아 지금보니까 0만입력했을땐 처리를못하네요;; 다음자릿수를 나타내는 변수를 하나 둬서 해결하면 될거같아요 2014/06/03  
stingygirl 네 감사합니다ㅠㅠ 정말 치가 떨리내요 사실 getchar도 쓰면 안되는 거 아닌가요? 선생한테 정말 따지고 싶거든요 .. 포인터도 안 배운 마당에 정말 저걸 만들 수 있는지 물어보고 싶어서 확인 하고 싶었습니다. 인터넷에는 아무리 찾아도 마땅한 결과가 안 나오더 라고요. 구글도 다 뒤져봤는데도 .. 답이 없던 마당에 cd80님 정말 감사합니다 ㅠㅠㅠㅠ p.s 아니면 보통 학교에서는 그러나요? 2014/06/03  
cd80 getchar()도 포인터나 배열을 쓰는게 아니라 그냥 문자 하나만 리턴하기 때문에 과제에 안맞진않아요
학원인가요? 학교인가요?
C언어를 공부하신지 얼마 되지 않으셨으면 약간 무리가 있는 과제인것 같아요
2014/06/03  
menial 외부에서 키보드로 입력하는 모든 숫자나 문자는 문자입니다. 그 문자를 scanf()가 문자는 문자로 숫자는 문자에서 숫자로 변형하여 줍니다. 2018/11/21