게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
c언어의 논리연산자를 간결하게 쓸 수 없나요?
게시물ID : programmer_20243짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 728회
댓글수 : 7개
등록시간 : 2017/04/09 21:55:45
아래의 코드는 문장을 입력하면 문장에 공백이 있으면 잘라서 한 단어씩 출력하는 소스코드인데요
그런데..
*(ps+i)==32 
이부분은 스페이스 코드가 있으면 계속 실행하는데요. 
스페이스바 이외에 !나 ,도 printf의 함수출력에서 지우고 싶다면 while(*(ps+i)==32 ||*(ps+i)==44||*(ps+i)==33),
while( *(ps+i)!=32 &&*(ps+i)!=44&&*(ps+i)!=33)  처럼 해야 하는데요.
그런데 그렇게 바꾸는거 보다는 *(ps+i)==(32||44||33) 이렇게 해도 될 거 같은데 그런데 이렇게하면 논리연산을 하면 컴파일시 오류가 나오는데요.
위처럼 lvalue==rvalue||lvalue==rvalue||lvalue==rvalue하는거는 너무 코드가 길어져서 좀 난잡해 보이는데 이것보다 더 간결한 표현식으로 표현할 수 있는 방법은 없을까요?

#include <stdio.h>
#include <stdlib.h>
char* my_token(char* ps);

int main()
{
char str[80];
char* p;
printf("문장 입력:");
gets(str);
while((p=my_token(str))!=NULL)
{
printf("%s\n",p);
}
return 0;
}
char* my_token(char* ps)
{
char* start;
static int i=0;
//while(*(ps+i)==32)
while(*(ps+i)==32 ||*(ps+i)==44||*(ps+i)==33)
{
i++;
}
start=ps+i;
if(*start==0)
return start=NULL;
else
{
//while(*(ps+i)!=32)
while( *(ps+i)!=32 &&*(ps+i)!=44&&*(ps+i)!=33)
{
i++;
if(*(ps+i)==0)
return start;
}
*(ps+(i++))=0;
return start;
}
}

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호