에러를 못잡겟어요 ㅠㅜ
글쓴이: NamSa / 작성시간: 금, 2004/05/14 - 12:51오전
sscanf가 .. 포인터형을 못받는 것같다는 생각 만 드네요
Quote:
#include <stdio.h>
main()
{
int i,t,j;
char *kor[100];
printf("insert the number of times : ");
scanf("%d",&t);//면개의 수를 대입할지 정한다.
for(j=0;j<=t;j++){
while(1)
{
printf("input number (1 ~ 100) : ");
scanf("%s",kor[j]);
if(sscanf(kor[j], "%d", &i) == 1 && (i >= 1&& i <= 100))//100에서 0사이의 숫자만 받도록한다
break;
printf("\nError!\n");
}
}
for(j=0;j<=t;j++){
printf("%s\n",kor[j]); //출력해준다
}
}
Forums:
헉!!! -_-;;; 이렇게 위험한 프로그래밍을 하시다니...T-
헉!!! -_-;;; 이렇게 위험한 프로그래밍을 하시다니...
T-T 먼저 공부부터 하시고 나신다음에 하시죠.
char *kor[100]이라고 하시면, 임의의 1차원 배열공간을 100개 만드신다는 뜻입니다.
헌데 scanf 에서 kor[j]라고 설정을 하시면, 무조건 한 단어를 입력... 또 다시 sscanf를 이용하시면... -_-;;;;
문제 분석 자체를 잘못 이해하신게 아니신가요...?
항상 조언 감사합니다.. 그럼 어떤방식으로 해야.. 여러개
항상 조언 감사합니다..
그럼 어떤방식으로 해야..
여러개의 .. 문장을 체크할수 있을까요~~
메일 : nan1004au@gmail.com
[quote]char *kor[100]이라고 하시면, 임의의 1차원
배열공간 100?????????
4바이트 주소 공간 100개 아닐런지..
Do you think that's the air you are breathing now?
sorry, I can't write korean right now..
there are two solutions, i think..
you need to allocate memory to kor[j] before using the scanf(), or
declare the kor as two dimension array, like char kor[100][100] instead of char *kor[100].
You need memory space to store the reading value.
Jason.
:D
I tested following code, and it works well..
#include <stdio.h>
main()
{
int i,t,j;
char kor[100][10];
printf("insert the number of times : ");
scanf("%d",&t);
for(j=0;j<t;j++){
while(1)
{
printf("input number (1 ~ 100) : ");
scanf("%s",kor[j]);
if(sscanf(kor[j], "%d", &i) == 1 && (i >= 1&& i <= 100))
break;
printf("\nError!\n");
}
}
for(j=0;j<=t;j++){
printf("%s\n",kor[j]);
}
}
=================================
Jason
You are never too old to do something smart
=================================
[quote="운형"][quote]char *kor[100]이라고 하
^^; 네. 4바이트 주소 공간 100개.
아무래도 우선 제가 문제 파악을 제대로 했는지 확인해 주세요.
1. 입력은 자유롭되, 공백문자를 통해 구분된 문자열이 1 이상 100이하의 숫자 이외에는 입력되지 않는다.
2. 100이상의 숫자가 입력되지 않아야 한다.
한 번 제가 만들려고 해보니... -_-;;; 으으음...
자꾸 고치게 되네요...
FSM(Finite State Machine)을 짜보려고 하고 있습니다 ( ' ')a
바로 위에분의 소스는 먹히지를 않네요 ㅠ,ㅜ 위에 위에 분의 소스는
바로 위에분의 소스는 먹히지를 않네요 ㅠ,ㅜ
위에 위에 분의 소스는 잘되고요..
메일 : nan1004au@gmail.com
(' ') 에엑? 그럼 [b]jasonlife[/b]님 소스처럼 1부터
(' ') 에엑? 그럼 jasonlife님 소스처럼 1부터 100 사이의 숫자만 입력되면 에러없이
계속 입력을 반복해야 하는 것인가요?
으음... ( _ _)a 어떻게 동작해야 하는 소스인지 모르겠네요...
그런데.. 입력받은 값을.. 혹시나해서 int 형으로 캐스트한후에 .
그런데.. 입력받은 값을..
혹시나해서 int 형으로 캐스트한후에 ..
더해ㅤㅂㅘㅅ너니 .. 역시나.. 아스키코드으ㅣ10진코드 값을
덜한 값으로 나오더군요..
더하기가 안되니 .. 평균이 ..될리 만무하구요 ㅠ,.ㅜ
#include <stdio.h>
main()
{
int i,t,j;
char kor[100][10],eng[100][10],math[100][10],name[100][10];
printf("insert the number of times : ");
scanf("%d",&t);
for(j=0;j<t;j++){
printf("input name : ");
scanf("%s",name[j]);
while(1)
{
printf("input kor number (1 ~ 100) : ");
scanf("%s",kor[j]);
if(sscanf(kor[j], "%d", &i) == 1 && (i >= 1&& i <= 100))
break;
printf("\nError!\n");
}
while(1)
{
printf("input eng number (1 ~ 100) : ");
scanf("%s",eng[j]);
if(sscanf(eng[j], "%d", &i) == 1 && (i >= 1&& i <= 100))
break;
printf("\nError!\n");
}
while(1)
{
printf("input number (1 ~ 100) : ");
scanf("%s",math[j]);
if(sscanf(math[j], "%d", &i) == 1 && (i >= 1&& i <= 100))
break;
printf("\nError!\n");
}
}
printf("|%4s|%4s|%4s|%4s|%5s\n","name","kor","eng","math","sum);
for(j=0;j<=t;j++){
printf("|%4s|%4s|%4s|%4si%5d|\n",name[j],kor[j],eng[j],(int)math[j],(int)kor[j]+(int)eng[j]+(int)math[j]);
}
}
메일 : nan1004au@gmail.com
-_- +으으음... FSM을 짜보려다가, 입력 버퍼 때문에 코드
-_- +
으으음... FSM을 짜보려다가, 입력 버퍼 때문에 코드가 실패했군요...
jasonlife님의 코드가 월등히 좋으신 것 같습니다. -_-;;;
그리고 입력 받으신 값을 숫자로 합산 하시고 싶으시면 string.h 포함하셔서 atoi()함수로 변환 후 합산하시죠.
전 FSM을 계속 시도해 보려고 합니다. ( - -)a 왜 안되지...?
흑... T-T 저의 우매함을 이제야 깨달았습니다....아...
흑... T-T 저의 우매함을 이제야 깨달았습니다....
아... 정말 저도 프로그래밍 공부 다시해야 겠군요...
이 문제를 FSM으로 짜려고 하다니... 그것도 허접한 코드로... T-T
오늘을 계기삼아 다시 노력해야 겠습니다. ( T T)
드디어 완성입니다.. ㅋ 다음에는 ncure 이던가하는.. 것을 이용
드디어 완성입니다.. ㅋ
다음에는 ncure 이던가하는.. 것을 이용해.. 구연해볼 까 합니다.
메일 : nan1004au@gmail.com
어째서 math값에 .. 이상한 값이 찍히는 건지.. ~#incl
어째서 math값에 .. 이상한 값이 찍히는 건지.. ~
#include <stdio.h>
#include <string.h>
main()
{
int i,t,j,sum,a[100],b[100],c[100],d,e,k;
char kor[100][10],eng[100][10],math[100][10],name[100][10];
printf("insert the number of times : ");
scanf("%d",&t);
for(j=0;j<t;j++){
printf("input name : ");
scanf("%s",name[j]);
while(1)
{
printf("input kor number (1 ~ 100) : ");
scanf("%s",kor[j]);
if(sscanf(kor[j], "%d", &i) == 1 && (i >= 1&& i <= 100))
break;
printf("\nError!\n");
}
while(1)
{
printf("input eng number (1 ~ 100) : ");
scanf("%s",eng[j]);
if(sscanf(eng[j], "%d", &i) == 1 && (i >= 1&& i <= 100))
break;
printf("\nError!\n");
}
while(1)
{
printf("input math number (1 ~ 100) : ");
scanf("%s",math[j]);
if(sscanf(math[j], "%d", &i) == 1 && (i >= 1&& i <= 100))
break;
printf("\nError!\n");
}
}
printf("|%2s|%5s|%5s|%5s|%5s|%7s|%5s|\n","no","name","kor","eng","math","sum","avg");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
for(j=0;j<t;j++){
sum=atoi(kor[j])+atoi(eng[j])+atoi(math[j]);
printf("|%02d|%5s|%5s|%5s|%5s|%7d|%3.2f|\n",j,name[j],kor[j],eng[j],math[j],sum,sum/3.00);
a[j] = atoi(kor[j]);
b[j] = atoi(eng[j]);
c[j] = atoi(math[j]);
}
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
for(j=0;j<t;j++){
d += a[j];
e += b[j];
k += c[j];
}
sum = d+e+k;
printf("|%02s|%5s|%5d|%5d|%5d|%7d|%3.2f|\n","no","all",d,e,k,sum,sum/(float)t);
}
메일 : nan1004au@gmail.com
소스코드를 올릴 때는 BB code 를 활용하시면 아래와 같이 들여쓰기가
소스코드를 올릴 때는 BB code 를 활용하시면 아래와 같이 들여쓰기가 반영됩니다. 그렇지 않으면 들여쓰기 열심히 한 게 소용이 없게 되지요.
세벌 https://sebuls.blogspot.kr/
댓글 달기