C 将两个字符打包为整数

C 将两个字符打包为整数,c,C,我写了一个代码,将两个字符打包成一个整数;它应该以十进制和二进制格式输出 代码编译成功,但问题是,在我输入第一个字符character1后,它并不是要求我输入character2,而是直接运行并到达代码末尾。我尝试在输入character1后添加getch(),但没有用。我是新来的。非常感谢您的帮助。提前谢谢 下面是我的代码: #include <stdio.h> void displayInBitFormat(char character); void packCharacters

我写了一个代码,将两个字符打包成一个整数;它应该以十进制和二进制格式输出

代码编译成功,但问题是,在我输入第一个字符
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');
}
#包括
void displayInBitFormat(字符);
无效packCharacters(character1、character2);
字符1,字符2;
内部主(空){
输入(“输入第一个字符”);
scanf(“%c”和字符1);
printf(“\n%c的位表示为:\n”,字符1);
displayInBitFormat(字符1);
printf(“输入第二个字符”);
scanf(“%c”和字符2);
getch();//尝试添加此
printf(“\n%c的位表示为:\n”,字符2);
displayInBitFormat(字符2);
认沽权(“”);
packCharacters(character1、character2);
getch();
}
空包字符(字符1、字符2){
无符号c;
c=character1;//为第一个字符分配无符号字符
c=c
拾取读取第一个字符时留在输入流上的换行符

将其更改为:

scanf(" %c",&character2);
更新以回应@user3615120的评论

假设您在想要读取第一个字符时输入了
a
Enter
。此时,输入流中有两个字符:
'a'
'\n'

scanf("%c",&character1);
执行时,
'a'
被读取并存储在
字符1
中。
'\n'
仍保留在输入流中

什么时候

执行时,
'\n'
将被读取并存储在
字符2中

scanf(" %c",&character2);

流中留下的空白将被丢弃。第一个非空白字符将被读取并存储在
character2
中使用
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');
}
#包括
#包括
void displayInBitFormat(无符号整数字符);
无效packCharacters(character1、character2);
int字符1,字符2;
内部主(空){
输入(“输入第一个字符”);
character1=getchar();
//阅读第一个角色的新行。
getchar();
printf(“\n%c的位表示为:\n”,字符1);
displayInBitFormat(字符1);
printf(“输入第二个字符”);
character2=getchar();
printf(“\n%c的位表示为:\n”,字符2);
displayInBitFormat(字符2);
认沽权(“”);
packCharacters(character1、character2);
}
空包字符(字符1、字符2){
无符号整数c;
c=character1;//为第一个字符分配无符号字符

c=cAwesome!它起作用了。谢谢。但我没有完全理解解释。如果你不介意的话,请你详细解释一下好吗?作为旁注,当你在这里发帖时,我们已经假设你的代码不起作用了。请不要在你的问题前面加上“代码不起作用”。在UTF-8(和其他编码)中一个字符可以远远超过一个单词。
scanf(" %c",&character2);
#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');
}