我正在尝试制作一个二进制到十进制的转换器,并且我想使用_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个数字。你能解释为什么吗?
答案 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();
}