2013-04-12 4 views
0

다음 코드를 사용하여 char 배열에 세미콜론이 오는 쉼표가 있는지 확인하려고합니다. 여기에 입력, 예를 12입니다 전날하지만, 내 코드C에서 문자 비교?

char m[80]; 
char *p = m; 

while(p!=pend) 
{ 
    char *pend = m + strlen(m); 
    int i=0; 

    if(*p!=',' || *p!=';') 
    { 
     printf("DDD"); 
     char temp[2]; 
     temp[0] = *p; 
     temp[1] = '\0'; 
     strcat(m2, temp); 
    } 
    else if(*p==',' && (*(p+1)==';')) 
    { 
     printf("CCC"); 
     char temp[2]; 
     temp[0] = *p; 
     temp[1] = '\0'; 
     strcat(m2, temp); 
    } 
} 

하지만 문제는, 일부 "경우 다른"3 들어간다 결코 그것. 그것에 대해 무엇을 할 수 있습니까?

if 부분이 항상 true로 평가 ( 어떤 문자 ',' 또는 ';'에 하나 같지 않은) 때문에

+0

디버거로 코드를 단계별로 실행하면 어떻게됩니까? – SecurityMatt

+0

사실이 코드는 bison 파일에 쓰고 있기 때문에 실제로는 사용할 수 없습니다. – yrazlik

+1

함수의 맨 위에서 "raise (SIGINT)"를 수행하고 GDB를 첨부하여 실행하십시오. 디버깅 할 수 없다면 좋은 코드를 작성할 수 없습니다. – SecurityMatt

답변

2
if(*p!=',' || *p!=';') 

항상 true가됩니다 (*p수 없습니다 모두','';'). 첫 번째 if은 항상 true이므로 다음 else if은 평가되지 않습니다.

첫 번째 if 블록으로 무엇을 하려는지 확실하지 않습니다. 어쩌면 가장 간단한 '수정'은 코드의 해당 부분을 삭제하는 것일 것입니다.

+0

감사합니다. 지금 알았습니다. – yrazlik

2

그것은 else 일부를 입력하지 않습니다 감사합니다.

+0

오, 그래 어떻게 내가 이것을 깨닫지 못하니! 고맙습니다! – yrazlik