Использование _getch () в цикле for - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь сделать двоичный в десятичный преобразователь, и я хотел использовать _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 голосов
/ 03 декабря 2018

После отладки кода, следующие изменения вы должны сделать с вашим кодом ..

  • объявить int j = 0.
  • Также вместо ris = intnum[8] * 2^0 использовать ris = intnum[7] * 1, так как массивиндекс начинается с 0 в c.
  • Также сделайте то же самое для 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();
        }
...