첫번째 예제도 수정을 가해야 합니다.
for(int j=0;j=='\0';j++)
{
s1[j]=putchar(ch);
}
왜 이런 구문을 넣었나요? 질문을 할때는 주석을 달아서 올리세요. 그럼 모르는 부분에 대해서 답변을
얻을수 있어서 좋을거 같습니다.
이구문을 필요하지 않습니다.
if 문으로 A ~ Z 인지를 검사한다음 이를 char s1[10]; 에 넣으려 한것이라면....
int j = 0;
while(ch = getchar......)
{
if(검사 A ~ Z)
{
s1[j] = ch;
j++;
}
}
s1[j] = '\0'; // 문자열이 끝을 위해 종료 문자를 넣어줌.
// 이것을 안넣어 주면 문자열 끝에 이상한 찌거기가 붙음.
해야 겠죠...
두번째... 함수를 선언할때 mm(char *); 라고 했는데 이는 잘못된 것입니다. 반듯이 리턴 형을 명시해줘야 합니다.
void mm(char *); 또는 char* mm(char*); 처럼...
절대 생략하지마시오.
리턴형도 명시해 주지 않고 mm() 함수내에 return 을 사용했네요..
그리고 이런 문제를 풀기위해서는 메모리 동적 할당을 알거나... 대문자 배열( 가령 main 에서 s1[10])의 포인터를 넘겨 거기에 직접 넣어야합니다.
우선 이부분부터 알아보세요.
한성현 님이 쓰신 글 :
: 제가 하는 것은.
: 입력값이
: COmmon Business Oriented Language
: 라면
: 출력갑이
: COBOL is COmmon BUsiness Oriented LAnguage
: 가 되는
: 대문자를 추출하는 것입니다.
: 그냥 대문자만 출력하는건 되는데여..
: 아니 그것도 getchar()로 해서 이상합니다.
: gets() 를 쓰고 함수로 정리를 한다면
: 어떻게 해야 되는지 궁금합니다.
:
: #include <stdio.h>
: #include <string.h>
:
: /*
: void main()
: {
: int ch;
: char s1[10];
:
: while((ch=getchar())!='\n')
: {
: if(ch>='A' && ch<='Z')
: {
: for(int j=0;j=='\0';j++)
: {
: s1[j]=putchar(ch);
: }
: }
: }
:
: printf("%s \n",s1);
: } */
: mm(char *);
: void main()
: {
: static char s[50];
: gets(s);
:
: printf("%s is %s\n",mm(s),s);
: }
:
: mm(char *s)
: {
: int i;
: char s1[10];
:
: for(i=0;i<=50;i++)
: {
: if(*(s+i)>='A' && *(s+i)<='Z')
: {
: for(int j=0;j=='\0';j++)
: {
: s1[j]=*(s+i);
: }
: }
: }
: return(*s1);
: }
:
: 위에 주석으로 되있는게 대문자만 거르는 것입니다.
: 이걸 함수로 만들어서 이용할려고 하는데 잘 안됩니다.
: 가르침 부탁드립니다~~
|