2014-05-19 3 views
1

두 문자를 정수로 묶는 코드를 작성했습니다. 10 진수 및 2 진 형식으로 출력되어야합니다.두 문자를 정수로 패킹

코드가 성공적으로 컴파일되었지만 첫 번째 문자 character1을 입력 한 후 character2을 입력하라는 메시지가 표시되지 않고 바로 코드 자체가 끝나기 시작합니다. character1을 입력 한 후 getch()을 추가했지만 사용하지 않았습니다. 나는 이것에 초보적이다. 어떤 도움이라도 대단히 감사합니다. 미리 감사드립니다.

#include <stdio.h> 
void displayInBitFormat(char character); 
void packCharacters(char character1, char character2); 
char character1, character2; 

int main(void){ 

    puts("Enter the first character"); 
    scanf("%c",&character1); 

    printf("\n%c's bit representation is: \n",character1); 
    displayInBitFormat(character1); 

    printf("Enter the second character"); 
    scanf("%c",&character2); 

    getch(); // TRIED ADDING THIS 

    printf("\n%c's bit representation is: \n",character2); 
    displayInBitFormat(character2); 

    puts(""); 

    packCharacters(character1,character2); 

    getch(); 

} 

void packCharacters(char character1, char character2){ 

    unsigned c; 

    c=character1; // assigning first character with unsigned 

    c=c<<8; // shifting first char to 8 bits left 
    c=c|character2; //bitwise inclusive OR 

    printf("After packing characters, Result in binary is: \n"); 
    displayInBitFormat(c); 
    puts("\nResult in decimal number is: "); 
    printf("%u", c); 

} 

//bit representer of an int 
void displayInBitFormat(char character){ 

    unsigned int i;//counter 


    unsigned int displayMask=1<<31; 
    printf("%10u=",character); 

    for (i=1;i<=32;++i) 
    { 
     putchar(character&displayMask ? '1':'0'); 

     character<<=1; 
     if (i%8==0){ 
     putchar(' '); 
    } 
} 
putchar('\n'); 
} 
+0

여기에 게시 할 때 메모는 이미 코드가 작동하지 않는다고 가정합니다. 질문에 "코드가 작동하지 않습니다"라는 접두사를 사용하지 마십시오. – ScottMcGready

+0

UTF-8 (및 다른 인코딩)에서는 문자가 하나 이상의 단어가 될 수 있습니다. – vonbrand

답변

0
scanf("%c",&character2); 

당신이 첫 번째 문자를 읽을 때 입력 스트림에 남아 있던 줄 바꿈 문자를 집어 들고 :

다음은 내 코드입니다. 에

변경을 :

user3615120 @에 의해 코멘트에 대응

scanf(" %c",&character2); 

업데이트은의 당신이 첫 번째 문자를 읽고 싶어 할 때 aEnter를 입력한다고 가정 해 봅시다. 이 때 입력 스트림에는 'a''\n'의 두 문자가 있습니다. 라인

scanf("%c",&character1); 

이 실행됩니다 때, 'a' 읽기 및 character1에 저장됩니다. '\n'은 여전히 ​​입력 스트림에 남아 있습니다.

scanf("%c",&character2); 

실행

'\n' 읽고 character2에 저장된다. 해당 행을

scanf(" %c",&character2); 

으로 변경하면 스트림에 남아있는 공백이 삭제됩니다. 첫 번째 비 공백 문자는 읽고 character2에 저장됩니다.

+0

굉장! 그것은 효과가 있었다. 고맙습니다. 그러나 나는 설명을 얻지 못했다. 네가 괜찮 으면 조금 더 자세히 설명해 줄 수 있니? – user23903

0

getchar()을 사용하는 가능한 다른 방법은 getchar()을 다시 호출하여 \n을 수동으로 먹는 것입니다. 또한 displayInBitFormat을 결합 된 표현식을 인쇄하는 데 사용하려면 char보다 넓은 유형을 사용해야합니다.

#include <stdio.h> 
#include <stdlib.h> 

void displayInBitFormat(unsigned int character); 
void packCharacters(char character1, char character2); 
int character1, character2; 

int main(void){ 
    puts("Enter the first character"); 
    character1 = getchar(); 

    // Eat the newline that came from reading the first character. 
    getchar(); 

    printf("\n%c's bit representation is: \n",character1); 
    displayInBitFormat(character1); 

    printf("Enter the second character"); 
    character2 = getchar(); 

    printf("\n%c's bit representation is: \n",character2); 
    displayInBitFormat(character2); 
    puts(""); 
    packCharacters(character1,character2); 
} 

void packCharacters(char character1, char character2){ 

    unsigned int c; 

    c=character1; // assigning first character with unsigned 

    c=c<<8; // shifting first char to 8 bits left 
    c=c|character2; //bitwise inclusive OR 

    printf("After packing characters, Result in binary is: \n"); 
    displayInBitFormat(c); 
    puts("\nResult in decimal number is: "); 
    printf("%u\n", c); 
} 

//bit representer of an int 
void displayInBitFormat(unsigned int character){ 

    unsigned int i;//counter 

    unsigned int displayMask=1<<31; 
    printf("%10u=",character); 

    for (i=1;i<=32;++i) 
    { 
     putchar(character&displayMask ? '1':'0'); 

     character<<=1; 
     if (i%8==0){ 
     putchar(' '); 
    } 
} 
putchar('\n'); 
}