这是我的代码
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
int o;
int menu;
printf("\n\t\t\t\t _________________________________________\n");
printf("\t\t\t\t| CONVERTER |\n");
printf("\t\t\t\t|=========================================|\n");
printf("\t\t\t\t| | |\n");
printf("\t\t\t\t| 1 | Decimal to Binary |\n");
printf("\t\t\t\t|_________|_______________________________|\n");
printf("\t\t\t\t| | |\n");
printf("\t\t\t\t| 2 | Binary to Decimal |\n");
printf("\t\t\t\t|_________|_______________________________|\n");
printf("\t\t\t\t| | |\n");
printf("\t\t\t\t| 3 | Octal to Binary |\n");
printf("\t\t\t\t|_________|_______________________________|\n");
printf("\t\t\t\t| | |\n");
printf("\t\t\t\t| 4 | Octal to Decimal |\n");
printf("\t\t\t\t|_________|_______________________________|\n");
printf("\t\t\t\t| | |\n");
printf("\t\t\t\t| 5 | Decimal to Octal |\n");
printf("\t\t\t\t|_________|_______________________________|\n");
printf("\t\t\t\t| | |\n");
printf("\t\t\t\t| 6 | Hexa to Decimal |\n");
printf("\t\t\t\t|_________|_______________________________|\n");
printf("\t\t\t\t| | |\n");
printf("\t\t\t\t| 0 | Quit |\n");
printf("\t\t\t\t|_________|_______________________________|\n");
printf("\n");
for(o=1;o<=50;o++){
printf("\n\t\t\t\t Please select\n\n\t\t\t\t ");
menu = getchar();
switch (menu)
{
case '1':{
long int decimalNumber,quotient;
int binaryNumber[100],i=1,j;
printf("\n\t\t\t\tEnter any decimal number: ");
scanf("%ld",&decimalNumber);
printf("\n");
quotient = decimalNumber;
while(quotient!=0){
binaryNumber[i++]= quotient % 2;
quotient = quotient / 2;}
printf("\t\t\t\tEquivalent binary value is: ");
for(j = i -1 ;j> 0;j--){
printf("%d",binaryNumber[j]);
}
printf("\n");
// o+= o + 1;
}
break;
case '2':{
long int binary1;
printf("\n\t\t\t\tEnter any Binary Number:\n\n\t\t\t\t");
scanf("%ld",&binary1);
printf("\n\t\t\t\tEquivalent binary value is: ");
int decimal=0;
int i=0;
int rem;
while(binary1!=0)
{
rem = binary1%10;
binary1/=10;
decimal += rem*pow(2,i);
++i;
}
printf("\n\n\t\t\t\t%d\n", decimal);
}
break;
case '3':{
long int octal1;
printf("\n\t\t\t\tEnter any Octal number: ");
scanf("%ld", &octal1);
int decimal=0, binary=0, i=0;
printf("\n\t\t\t\tThe Equivalent Binary Value is: ");
while(octal1!=0)
{
decimal+=(octal1%10)*pow(8,i);
++i;
octal1/=10;
}
i=1;
while(decimal!=0)
{
binary+=(decimal%2)*i;
decimal/=2;
i*=10;
}
printf("%d\n", binary);
}
break;
case '4':{
long int octal2;
printf("\n\t\t\t\tEnter any Octal number: ");
scanf("%ld", &octal2);
int decimal2=0, i=0;
printf("\n\t\t\t\tThe Equivalent Decimal Value is: ");
while(octal2!=0)
{
decimal2+=(octal2%10)*pow(8,i);
++i;
octal2/=10;
}
printf("%d\n", decimal2);
}
break;
case '5':{
long int decimal2,quotient2;
printf("\n\t\t\t\tEnter any decimal number: ");
scanf("%ld",&decimal2);
int octal3[100],w=1,e;
quotient2 = decimal2;
while(quotient2!=0){
octal3[w++]= quotient2%8;
quotient2 = quotient2 / 8;
}
printf("\n\t\t\t\tEquivalent octal value is: ");
for(e=w-1;e>0;e--)
printf("%d", octal3[e]);
printf("\n");
}
break;
case '6':{
unsigned int q;
printf("\n\t\t\t\tEnter any Hexadecimal number: ");
scanf("%x", &q);
printf("\nThe Equivalent decimal value is: ");
printf("%d\n", q);
}
break;
case '0':{
printf("\n\t\t\t\t Are you sure?\n\n\t\t\t\t y or n: ");
char b[9];
scanf("%s", b);
if(strcmp(b,"y")==0){
o=o+50;
printf("\n\n\t\t\t\t Have a nice day!\n\n");}
}
break;
}
}
return 0;
}在获得菜单中某个菜单项的结果后,“请选择”短语打印2次,然后让您选择另一个菜单项。
为什么要打印2次?
这是一个转换器程序,作为我的基本编程主题的项目。我们被告知要编写一个程序来转换这些数字,在转换数字之后,程序不应该结束,应该让您选择另一个选项或选择“退出”退出程序。
发布于 2016-02-03 09:02:34
我复制了你的代码并进行了调试。似乎在选择一个选项并输入要转换的数字后,"menu = getchar();“的值变成了10,并且不会等待用户输入开关(菜单)中没有处理的值。考虑使用scanf,因为这对我来说工作得很好。请记住,您声明的菜单是一个int而不是char,所以我猜这一定是您遇到麻烦的原因……
使用
scanf("%ld", &menu);并像这样替换case语句。
case '1': // change to case 1:
case '2': // change to case 2:以此类推..因为值将是int而不是char。
https://stackoverflow.com/questions/35122504
复制相似问题