当前位置: 首页 > 知识库问答 >
问题:

即使在子功能scanf(C)上也会收集主菜单选项提示

麻昌翰
2023-03-14

我正在创建一个程序,它有一个主菜单链接到其他几个功能。这是主菜单代码

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;
}

十、一、百和千都使用开关,结构与下面的代码相同:

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)Case 3。

共有2个答案

呼延渝
2023-03-14

我意识到神秘数字X不知何故被用作高级菜单输入!我不知道我做错了什么。

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

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

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

要解决此问题,只需执行%i指令即可。例如:

scanf("%i",&iWor); 

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

司徒茂实
2023-03-14

没有神秘数字X或幽灵:)

改变

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

scanf("%i",&iWor);

scanf格式字符串中的空白字符将忽略所有空白字符。这就是为什么您必须输入一个非空白字符。

 类似资料:
  • 我使用CORS请求将数据发布到不同域上的php脚本。我收到错误: 跨域请求被阻止:同源策略不允许读取“mydomain”处的远程资源(原因:缺少CORS标头“Access-Control-Allow-Origin”)。 我已经使用以下代码在php中设置了标题。 我也在这篇文章中尝试了这个代码 这是供参考的javascript代码 响应标题 请求标头 但我运气不好任何帮助我都很感激

  • 我已经用菜单和子菜单填充了我的NSpoupButton。 当我在根菜单上选择一个菜单项(因此,不是子菜单项)时,它会正确地显示所选的菜单项。当我再次点击弹出按钮时,我会在鼠标下得到选中的菜单项。 但如果我选择一个子菜单项,它不会显示它。如果我再次点击弹出按钮,我就不会把它放在鼠标下。每当我点击按钮时,我都必须在菜单层次结构中寻找所选项目。 任何解决方案?

  • 问题内容: 我正在尝试从一个简单的JSON文件填充一个集合,这是学习骨干.js的一部分。但是我无法使它工作。 进行了AJAX调用(已通过FireBug验证),但是该方法返回 。 我究竟做错了什么? 这是我的JSON: 问题答案: 是异步的,如果立即调用,则不会填充您的集合。要解决此问题,您只需将集合 重置 事件(Backbone的 同步 事件> = 1.0)绑定到视图render: 请注意bind

  • 以前很多次,当我尝试在mySQL表中设置/更新/删除某些内容时,它会给出 错误代码: 1175年。您正在使用安全更新模式,并且您尝试更新不使用使用 KEY 列的 WHERE 的表 要禁用安全模式,请切换首选项中的选项 - 我可以通过在where子句中包含一个涉及主键的真实条件来解决这个问题。 但是,为什么以下方法不起作用? LiftID是一个varchar,是主键。 更新:根据Bill Karwi

  • 本文向大家介绍Android开发实现SubMenu选项菜单和子菜单示例,包括了Android开发实现SubMenu选项菜单和子菜单示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android开发实现SubMenu选项菜单和子菜单。分享给大家供大家参考,具体如下: 简介: SubMenu:代表一个子菜单,包含1~N个MenuItem 实现效果: 具体实现方法: 主活动 MainActi

  • 因为TalkBack和我的应用程序使用相同的TTS引擎,所以一次只能说一句话。因此,我的应用程序正在逐句读取它的WebView语句,但随后用户将注意力集中在一个菜单项上,TalkBack将读取它的描述。因为我的演讲语句被打断了,所以将调用onDone()(onDone()无法区分该语句是完全被说出来的还是被简单打断的),所以将调用speaknextsence(),即使我的前一个句子可能在仅仅两个字