После отладки кода, следующие изменения вы должны сделать с вашим кодом ..
- объявить
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();
}