在for循环中使用_getch()

时间:2018-12-03 18:01:00

标签: c conio

我正在尝试制作一个二进制到十进制的转换器,并且我想使用_getch(),这样用户不必按回车即可输入他输入的每个数字,但是……

#include <stdio.h>
#include <conio.h>
int main() {
    int intnum[8], i = 0, ris;
    char charnum;
    for (i = 0; i < 8; i++) {
        charnum = _getch();
        printf("%c", charnum);
        intnum[i] = (charnum - '0');
    }
    ris = intnum[8] * 2^0;
    for (i = 7; i > 0; i--) {
        ris += (intnum[i] * 2 ^ j);
        j++;
    }
    printf("%d", ris);
    getchar();
}

…但是问题在于,当他们进入循环时,用户只能输入4个数字,而不能输入8个数字。你能解释为什么吗?

1 个答案:

答案 0 :(得分:0)

在调试代码之后,请进行以下更改。.

  • 声明int j = 0
  • 也不要使用ris = intnum[8] * 2^0,因为数组索引以c中的ris = intnum[7] * 1开头,因此请使用0
  • 还使用左移运算符(for(i = 6;i >= 0;i--))对ris += intnum[i] * 2<<j<<进行同样的操作。
  • 基本上不需要使用getch(),这会使您的程序 不可携带,但是如果您想使用它,那么我建议您使用 下面的代码。

对于Linux ,请使用此代码。

    #include <stdio.h>
    #include <termios.h>
    #include <unistd.h>

    int getch (void){
            int ch;
            struct termios oldt, newt;
            tcgetattr(STDIN_FILENO, &oldt);
            newt = oldt;
            newt.c_lflag &= ~(ICANON|ECHO);
            tcsetattr(STDIN_FILENO, TCSANOW, &newt);
            ch = getchar();
            tcsetattr(STDIN_FILENO, TCSANOW, &oldt);

            return ch;
    }
    int main() {
        int intnum[8], i = 0, ris,j = 0;
        char charnum;
        for (i = 0; i < 8; i++) {
            charnum = getch();
            intnum[i] = (charnum-'0');
        }
        ris = intnum[7] * 1;
        for (i = 6; i >= 0; i--) {
            ris += (intnum[i] * 2<<j);
            j++;
        }
        printf("%d", ris);
        getchar();
    }

对于Windows ,请使用此代码。

    #include <stdio.h>
    #include <conio.h>
    int main() {
            int intnum[8], i = 0, ris,j = 0;
            char charnum;
            for (i = 0; i < 8; i++) {
                charnum = getch();
                intnum[i] = (charnum-'0');
            }
            ris = intnum[7] * 1;
            for (i = 6; i >= 0; i--) {
                ris += (intnum[i] * 2<<j);
                j++;
            }
            printf("%d", ris);
            getchar();
        }