求大佬搭救,菜单选项输入不了选项。

Monchhichi_2018 2018-04-19 03:37:17
#include<stdio.h>
void showmenu(void);
int getchoice(int high, int low);
int main(void)
{
int code;

showmenu();
while((code = getchoice(4,1)) != 4)
{
printf("I like choice %d.\n",code);
showmenu();
}

return 0;
}

void showmenu(void)
{
printf("Please choose one of following:\n");
printf("1) copy files 2) move files\n");
printf("3) remove files 4) quit\n");
printf("Enter the number of your choice:\n");
}

int getchoice(int high, int low)
{
int num, good;

good = scanf("%d", &num);
while(good == 1 && (num < low || num > high))
{
printf("%d is not a valid choice; try again.\n", num);
showmenu();
good = scanf("%d", &num);
}
if(scanf("%d", &num) != 1)
{
printf("Input error.");
num = 4;
}

printf("%d", num);

return num;
}
...全文
587 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-04-19
  • 打赏
  • 举报
回复
学会调试比改好这段程序重要; 学会找水比要水现在解渴重要。
自信男孩 2018-04-19
  • 打赏
  • 举报
回复
#include<stdio.h>

void showmenu(void);
int getchoice(int high, int low);

int main(void)
{
    int code;

    showmenu();
    while((code = getchoice(4,1)) != 4)
    {
        printf("I like choice %d.\n",code);
        showmenu();
    }

    return 0;
}

void showmenu(void)
{
    printf("Please choose one of following:\n");
    printf("1) copy files       2) move files\n");
    printf("3) remove files     4) quit\n");
    printf("Enter the number of your choice:\n");
}

int getchoice(int high, int low)
{
    int num, good;

    good = scanf("%d", &num);
    while(good == 1 && (num < low || num > high))
    {
        printf("%d is not a valid choice; try again.\n", num);
        showmenu();
        good = scanf("%d", &num);
    }
    //if(scanf("%d", &num) != 1)
    if(good != 1)
    {
        printf("Input error.");
        num = 4;
    }

    printf("%d", num);

    return num;
}
参考一下吧 因为while后面还有一个scanf,所以你需要输入两次才行。但是,修改一下,改成如上就可以了。
Monchhichi_2018 2018-04-19
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
你说的有道理,但是远水解不了近渴。先帮忙分析这是什么原因,谢谢! 输入不了1-4
赵4老师 2018-04-19
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
赵4老师 2018-04-19
  • 打赏
  • 举报
回复
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
 if (条件1) break;
 //...
 if (条件2) continue;
 //...
 if (条件3) return;
 //...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
while (!feof(f)) {
 a=fgetc(f);
 //...
 b=fgetc(f);//可能此时已经feof了!
 //...
}
而这样写就没有问题:
while (1) {
 a=fgetc(f);
 if (feof(f)) break;
 //...
 b=fgetc(f);
 if (feof(f)) break;
 //...
}
类似的例子还可以举很多。

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧