C While循环语法错误即使在尝试中断时也不会编译
我不断遇到语法错误,无法找到没有完成循环的地方。我的程序是查询转换成什么,然后在转换后询问用户是否想再次转换,如果是,再次显示选项菜单 有人能告诉我哪里出了问题吗C While循环语法错误即使在尝试中断时也不会编译,c,while-loop,syntax-error,C,While Loop,Syntax Error,我不断遇到语法错误,无法找到没有完成循环的地方。我的程序是查询转换成什么,然后在转换后询问用户是否想再次转换,如果是,再次显示选项菜单 有人能告诉我哪里出了问题吗 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(void){ char answer; int selection; int again = 0; printf("Sel
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
char answer;
int selection;
int again = 0;
printf("Select Conversion:\n");
printf("(1.)Hex to Binary\n(2.)Binary to Hex\n");
scanf("%d", &selection);
while (again != 1)
{
if (selection ==1)
{
char bin2[1000], hexa2[1000];
long int a = 0;
printf("Enter a hex or binary value: ");
scanf("%s", &hexa2);
printf("\nBinary value: ");
while (hexa2[a])
{
switch (hexa2[a])
{
case '0':
printf("0000");
break;
case '1':
printf("0001");
break;
case '2':
printf("0010");
break;
case '3':
printf("0011");
break;
case '4':
printf("0100");
break;
case '5':
printf("0101");
break;
case '6':
printf("0110");
break;
case '7':
printf("0111");
break;
case '8':
printf("1000");
break;
case '9':
printf("1001");
break;
case 'A':
printf("1010");
break;
case 'B':
printf("1011");
break;
case 'C':
printf("1100");
break;
case 'D':
printf("1101");
break;
case 'E':
printf("1110");
break;
case 'F':
printf("1111");
break;
case 'a':
printf("1010");
break;
case 'b':
printf("1011");
break;
case 'c':
printf("1100");
break;
case 'd':
printf("1101");
break;
case 'e':
printf("1110");
break;
case 'f':
printf("1111");
break;
default:
printf("\n Invalid hexa digit %c ", hexa2[a]);
return 0;
}
a++;
break;
}
}
if (selection == 2)
{
long int bin, hex = 0, i = 1, left;
printf("Enter Binary Number: \n");
scanf("%ld", &bin);
while (bin != 0)
{
left = bin % 10;
hex = hex + left * i;
i = i * 2;
bin = bin / 10;
}
printf("Hexadecimal value: %lX", hex);
}
printf("\nContinue(Y/N)?\n");
scanf("%s", &answer);
if (answer=='Y'||answer=='y')
{
again = again +2;
}
else
{
again=1;
}
}
}
printf("Exit");
return 0;
}
#包括
#包括
#包括
int main(void){
答案;
int选择;
int=0;
printf(“选择转换:\n”);
printf(“(1.)十六进制到二进制\n(2.)二进制到十六进制”);
scanf(“%d”,选择(&S);
while(再次!=1)
{
如果(选择==1)
{
char bin2[1000],hexa2[1000];
长整数a=0;
printf(“输入十六进制或二进制值:”);
scanf(“%s”&hexa2);
printf(“\n二次值:”);
while(hexa2[a])
{
开关(hexa2[a])
{
案例“0”:
printf(“0000”);
打破
案例“1”:
printf(“0001”);
打破
案例“2”:
printf(“0010”);
打破
案例“3”:
printf(“0011”);
打破
案例“4”:
printf(“0100”);
打破
案例“5”:
printf(“0101”);
打破
案例“6”:
printf(“0110”);
打破
案例“7”:
printf(“0111”);
打破
案例“8”:
printf(“1000”);
打破
案例“9”:
printf(“1001”);
打破
案例“A”:
printf(“1010”);
打破
案例“B”:
printf(“1011”);
打破
案例“C”:
printf(“1100”);
打破
案例“D”:
printf(“1101”);
打破
案例“E”:
printf(“1110”);
打破
案例“F”:
printf(“1111”);
打破
案例“a”:
printf(“1010”);
打破
案例“b”:
printf(“1011”);
打破
案例“c”:
printf(“1100”);
打破
案例“d”:
printf(“1101”);
打破
案例“e”:
printf(“1110”);
打破
案例“f”:
printf(“1111”);
打破
违约:
printf(“\n无效的六位数%c”,hexa2[a]);
返回0;
}
a++;
打破
}
}
如果(选择==2)
{
长整型箱,十六进制=0,i=1,左;
printf(“输入二进制数:\n”);
scanf(“%ld”、&bin);
while(bin!=0)
{
左=箱%10;
十六进制=十六进制+左*i;
i=i*2;
bin=bin/10;
}
printf(“十六进制值:%lX”,十六进制);
}
printf(“\N是否继续?”\N”);
scanf(“%s”和“应答”);
如果(答案=='Y'|答案=='Y')
{
再次=再次+2;
}
其他的
{
再次=1;
}
}
}
printf(“退出”);
返回0;
}
我不断遇到语法错误,无法找到没有完成循环的地方。我的程序是查询转换成什么,然后在转换后询问用户是否想再次转换,如果是,再次显示选项菜单
有人能告诉我哪里出了问题吗?您发布的代码比
{
多
。请在此处删除多余的}
:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
char answer;
int selection;
int again = 0;
printf("Select Conversion:\n");
printf("(1.)Hex to Binary\n(2.)Binary to Hex\n");
scanf("%d", &selection);
while (again != 1)
{
if (selection ==1)
{
char bin2[1000], hexa2[1000];
long int a = 0;
printf("Enter a hex or binary value: ");
scanf("%s", &hexa2);
printf("\nBinary value: ");
while (hexa2[a])
{
switch (hexa2[a])
{
case '0':
printf("0000");
break;
case '1':
printf("0001");
break;
case '2':
printf("0010");
break;
case '3':
printf("0011");
break;
case '4':
printf("0100");
break;
case '5':
printf("0101");
break;
case '6':
printf("0110");
break;
case '7':
printf("0111");
break;
case '8':
printf("1000");
break;
case '9':
printf("1001");
break;
case 'A':
printf("1010");
break;
case 'B':
printf("1011");
break;
case 'C':
printf("1100");
break;
case 'D':
printf("1101");
break;
case 'E':
printf("1110");
break;
case 'F':
printf("1111");
break;
case 'a':
printf("1010");
break;
case 'b':
printf("1011");
break;
case 'c':
printf("1100");
break;
case 'd':
printf("1101");
break;
case 'e':
printf("1110");
break;
case 'f':
printf("1111");
break;
default:
printf("\n Invalid hexa digit %c ", hexa2[a]);
return 0;
}
a++;
break;
}
}
if (selection == 2)
{
long int bin, hex = 0, i = 1, left;
printf("Enter Binary Number: \n");
scanf("%ld", &bin);
while (bin != 0)
{
left = bin % 10;
hex = hex + left * i;
i = i * 2;
bin = bin / 10;
}
printf("Hexadecimal value: %lX", hex);
}
printf("\nContinue(Y/N)?\n");
scanf("%s", &answer);
if (answer=='Y'||answer=='y')
{
again = again +2;
}
else
{
again=1;
}
}
}
printf("Exit");
return 0;
}
if (answer=='Y'||answer=='y')
{
again = again +2;
}
else
{
again=1;
}
}
另外,更改scanf(“%s”和&hexa2)代码>到scanf(“%s”,十六进制2)代码>。对于%s
,应传递字符*
hexa2
是一个由1000个字符组成的数组(char[1000]
),因此&hexa2
是一个指向1000个字符组成的数组的指针(char(*)[1000]
)。当您使用hexa2
作为参数时,它将自动转换为指向其第一个参数的指针,因此将成为char*
\include
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
char answer;
int selection;
do
{
printf("Select Conversion:\n");
printf("(1.)Hex to Binary\n(2.)Binary to Hex\n");
scanf("%d", &selection);
if (selection == 1)
{
char bin2[1000], hexa2[1000];
long int a = 0;
printf("Enter a hex value: ");
scanf("%s", hexa2);
printf("\nBinary value: ");
while (hexa2[a])
{
switch (hexa2[a])
{
case '0':
printf("0000");
break;
case '1':
printf("0001");
break;
case '2':
printf("0010");
break;
case '3':
printf("0011");
break;
case '4':
printf("0100");
break;
case '5':
printf("0101");
break;
case '6':
printf("0110");
break;
case '7':
printf("0111");
break;
case '8':
printf("1000");
break;
case '9':
printf("1001");
break;
case 'A':
printf("1010");
break;
case 'B':
printf("1011");
break;
case 'C':
printf("1100");
break;
case 'D':
printf("1101");
break;
case 'E':
printf("1110");
break;
case 'F':
printf("1111");
break;
case 'a':
printf("1010");
break;
case 'b':
printf("1011");
break;
case 'c':
printf("1100");
break;
case 'd':
printf("1101");
break;
case 'e':
printf("1110");
break;
case 'f':
printf("1111");
break;
default:
printf("\n Invalid hexa digit %c ", hexa2[a]);
return 0;
}
a++;
}
}
else if (selection == 2)
{
long int bin, hex = 0, i = 1, left;
printf("Enter Binary Number: \n");
scanf("%ld", &bin);
while (bin != 0)
{
left = bin % 10;
hex = hex + left * i;
i = i * 2;
bin = bin / 10;
}
printf("Hexadecimal value: %lX", hex);
}
printf("\nContinue(Y/N)?\n");
scanf("%s", &answer);
} while (answer == 'Y' || answer == 'y');
printf("Exit");
return 0;
}
#包括
#包括
内部主(空){
答案;
int选择;
做
{
printf(“选择转换:\n”);
printf(“(1.)十六进制到二进制\n(2.)二进制到十六进制”);
scanf(“%d”,选择(&S);
如果(选择==1)
{
char bin2[1000],hexa2[1000];
长整数a=0;
printf(“输入十六进制值:”);
扫描频率(“%s”,十六进制2);
printf(“\n二次值:”);
while(hexa2[a])
{
开关(hexa2[a])
{
案例“0”:
printf(“0000”);
打破
案例“1”:
printf(“0001”);
打破
案例“2”:
printf(“0010”);
打破
案例“3”:
printf(“0011”);
打破
案例“4”:
printf(“0100”);
打破
案例“5”:
printf(“0101”);
打破
案例“6”:
printf(“0110”);
打破
案例“7”:
printf(“0111”);