主菜单选择提示在子功能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("nnThank you for using our Programnn ");
                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;
}

Tenty,Ones,百分之一千都使用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;
}

由于我不能张贴图像,但生病尝试显示功能输出的样子


输入一个数字(最多3000):
619

//我按这里进入没有任何反应
3 //我必须输入另一个数字来显示转换,在这个例子中是3。


六百十九

之后,它会返回主菜单进行分割秒,然后直接进入Main()Switch(iMenuChoice)情况3。


没有神秘数字X或鬼魂:)

更改

scanf("%i n",&iWor); 

scanf("%i",&iWor);

您在scanf格式字符串中的空白字符会忽略所有空白字符。 这就是为什么你被迫输入一个非空白字符的原因。


我意识到神秘数字X在某种程度上被用作高级菜单输入! 我不知道我做错了什么。

没有神秘数字X.代码中的问题是这一行:

scanf("%i n",&iWor); 

这个scanf忽略了空格字符。 在scanf中将空格字符指定为指令时。 该指令可以在输入中匹配任意数量的空白,包括无。 这就是为什么你必须插入第二个“神秘”的价值。 根据scanf文档,空白字符是一系列空白字符(空格,制表符,换行符等;请参阅isspace(3))。

要解决这个问题,你可以只使用%i指令。 例如:

scanf("%i",&iWor); 

文档:http://man7.org/linux/man-pages/man3/scanf.3.html

链接地址: http://www.djcxy.com/p/72173.html

上一篇: Main Menu choice prompt is gathered even on sub Function scanf (C)

下一篇: how does int main() and void main() work