主菜单选择提示甚至收集子功能 scanf (C)
Main Menu choice prompt is gathered even on sub Function scanf (C)
我正在创建一个程序,该程序的主菜单链接到其他几个功能。这是主菜单代码
int main(){
int iMenuChoice,exit;
iMenuChoice=0;
exit =1;
while (exit !=0){
system("cls");
printf("**********Main Menu************\n");
printf("*1) Cartesian Plane *\n");
printf("*2) Number to Words *\n");
printf("*3) b *\n");
printf("*4) c *\n");
printf("*5) d *\n");
printf("*6) e *\n");
printf("*7) Exit *\n");
printf("*******************************\n");
scanf("%d",&iMenuChoice);
switch (iMenuChoice) {
case 1:
Cartisian();
break;
case 2:
Num2Word();
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
system("cls");
printf("\n\nThank you for using our Program\n\n ");
exit = 0;
break;
default:
break;
}
}
getche();
}
所以我测试了我的数字到单词功能,它提示用户输入 (Int)。
但是当我输入数字时,该函数会要求输入另一个数字(没有 printf 提示只是一个等待数字输入的 _),让我们称这个神秘数字为 X.
该功能完成号码转换后,程序会瞬间进入主菜单并自动进入另一个功能。
我意识到神秘数字 X 不知何故被用作高级菜单输入!我不知道我做错了什么。
这是 num2Word 函数的代码。
int Num2Word()
{
int iWor,iOnes,iTens,iHundred,iThousand;
system("cls");
printf("Enter a number(max 3000)\n");
scanf("%i \n",&iWor);
if(iWor<=3001)
{
iOnes=iWor%10;
iWor=iWor/10;
iTens=iWor%10;
iWor=iWor/10;
iHundred=iWor%10;
iWor=iWor/10;
iThousand=iWor%10;
Thousand(iThousand);
Hundred(iHundred);
if(iTens!=1)
{
Tenty(iTens);
Ones(iOnes);
}
if(iTens==1)
Exception(iOnes);
}
else{
printf("beyond 3000");
}
getche();
return 0;
}
十位、个位、百位、千位均使用Switch,结构同下代码:
int Ones(int x)
{
if(x!=0){
switch(x)
{
case 1:
printf("One");
break;
case 2:
printf("Two");
break;
case 3:
printf("Three");
break;
case 4:
printf("Four ");
break;
case 5:
printf("Five");
break;
case 6:
printf("Six");
break;
case 7:
printf("Seven");
break;
case 8:
printf("Eight");
break;
case 9:
printf("Nine");
break;
default:
break;
}
}
return;
}
因为我无法 post 图片,所以我会尝试展示函数输出的样子
输入一个数字(最多 3000):
第619章【=34=】
//我在这里按下回车,但没有任何反应
3 //我必须输入另一个数字才能显示转换,在本例中为数字 3。
六百一十九
之后,它会回到主菜单,然后直接进入 Main() Switch(iMenuChoice) Case 3.
没有神秘数字 X 或幽灵 :)
改变
scanf("%i \n",&iWor);
至
scanf("%i",&iWor);
scanf 格式字符串中的空白字符将忽略所有空白字符。这就是您被迫输入非空白字符的原因。
I realized that The mystery number X is somehow being used as an
advance menu input! I dont know what i did wrong.
没有神秘数字 X。您的代码中的问题是这一行:
scanf("%i \n",&iWor);
此 scanf
忽略白色-space 字符。当白色-space 字符被指定为scanf
中的指令时。该指令在输入中加工任意数量的白色 space,包括 none。这就是您必须插入第二个 "mysterious" 值的原因。根据 scanf
文档,白色 space 字符是一系列白色-space 字符(space、制表符、换行符等;参见 space(3 )).
要解决这个问题,你可以只用%i
指令。例如:
scanf("%i",&iWor);
我正在创建一个程序,该程序的主菜单链接到其他几个功能。这是主菜单代码
int main(){
int iMenuChoice,exit;
iMenuChoice=0;
exit =1;
while (exit !=0){
system("cls");
printf("**********Main Menu************\n");
printf("*1) Cartesian Plane *\n");
printf("*2) Number to Words *\n");
printf("*3) b *\n");
printf("*4) c *\n");
printf("*5) d *\n");
printf("*6) e *\n");
printf("*7) Exit *\n");
printf("*******************************\n");
scanf("%d",&iMenuChoice);
switch (iMenuChoice) {
case 1:
Cartisian();
break;
case 2:
Num2Word();
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
system("cls");
printf("\n\nThank you for using our Program\n\n ");
exit = 0;
break;
default:
break;
}
}
getche();
}
所以我测试了我的数字到单词功能,它提示用户输入 (Int)。 但是当我输入数字时,该函数会要求输入另一个数字(没有 printf 提示只是一个等待数字输入的 _),让我们称这个神秘数字为 X.
该功能完成号码转换后,程序会瞬间进入主菜单并自动进入另一个功能。
我意识到神秘数字 X 不知何故被用作高级菜单输入!我不知道我做错了什么。
这是 num2Word 函数的代码。
int Num2Word()
{
int iWor,iOnes,iTens,iHundred,iThousand;
system("cls");
printf("Enter a number(max 3000)\n");
scanf("%i \n",&iWor);
if(iWor<=3001)
{
iOnes=iWor%10;
iWor=iWor/10;
iTens=iWor%10;
iWor=iWor/10;
iHundred=iWor%10;
iWor=iWor/10;
iThousand=iWor%10;
Thousand(iThousand);
Hundred(iHundred);
if(iTens!=1)
{
Tenty(iTens);
Ones(iOnes);
}
if(iTens==1)
Exception(iOnes);
}
else{
printf("beyond 3000");
}
getche();
return 0;
}
十位、个位、百位、千位均使用Switch,结构同下代码:
int Ones(int x)
{
if(x!=0){
switch(x)
{
case 1:
printf("One");
break;
case 2:
printf("Two");
break;
case 3:
printf("Three");
break;
case 4:
printf("Four ");
break;
case 5:
printf("Five");
break;
case 6:
printf("Six");
break;
case 7:
printf("Seven");
break;
case 8:
printf("Eight");
break;
case 9:
printf("Nine");
break;
default:
break;
}
}
return;
}
因为我无法 post 图片,所以我会尝试展示函数输出的样子
输入一个数字(最多 3000):
第619章【=34=】
//我在这里按下回车,但没有任何反应
3 //我必须输入另一个数字才能显示转换,在本例中为数字 3。
六百一十九
之后,它会回到主菜单,然后直接进入 Main() Switch(iMenuChoice) Case 3.
没有神秘数字 X 或幽灵 :)
改变
scanf("%i \n",&iWor);
至
scanf("%i",&iWor);
scanf 格式字符串中的空白字符将忽略所有空白字符。这就是您被迫输入非空白字符的原因。
I realized that The mystery number X is somehow being used as an advance menu input! I dont know what i did wrong.
没有神秘数字 X。您的代码中的问题是这一行:
scanf("%i \n",&iWor);
此 scanf
忽略白色-space 字符。当白色-space 字符被指定为scanf
中的指令时。该指令在输入中加工任意数量的白色 space,包括 none。这就是您必须插入第二个 "mysterious" 值的原因。根据 scanf
文档,白色 space 字符是一系列白色-space 字符(space、制表符、换行符等;参见 space(3 )).
要解决这个问题,你可以只用%i
指令。例如:
scanf("%i",&iWor);