C语言 关于int类型输入错误的问题

weixin_41311963 2017-12-07 11:50:52
void CDone()
{
int n;
printf("请选择操作对象(1.购物信息 2.会员信息):") ;
while (scanf("%d",&n)!=1)
{
printf("输入错误,请重新输入\n");
fflush(stdin); //清空输入缓冲区
CDone(); //返回该函数开头
}
if (n!=1&&n!=2)
{
printf("输入错误,请重新选择\n");
CDone();
}
if (n==1)
CDtwo;
else CDthree();
}

void CDtwo()
{
int n;
printf("请选择功能:(1.查询余额 2.查询当天开销 3.增加会员 4.删除会员 5.修改会员信息):"); //会员信息操作
while (scanf("%d",&n)!=1)
{
printf("输入错误,请重新选择\n");
fflush(stdin);
CDtwo();
}
if (n!=1&&n!=2&&n!=3&&n!=4&&n!=5)
{
printf("输入错误,请重新选择\n");
CDtwo();
}
switch (n)
{ case 1:Money(); break;
case 2:Cost(); break;
case 3:Add(); break;
case 4:DHY(); break;
case 5:Change(); break;
}
}

这个函数里面的while判断输入为字符时错误,重新调用while所在的函数
但是当输入“1w”时候,能调用到输入“1”调用的CDtwo函数,然后在CDtwo中才报错并重新引用CDtwo一次,在CDtwo中输入数字加字母后回车也同样重复了CDone的问题
例:
请选择操作对象(1.购物信息 2.会员信息):1t
请选择功能:(1.查询余额 2.查询当天开销 3.增加会员 4.删除会员 5.修改会员信息):
输入错误请重新选择
请选择功能:(1.查询余额 2.查询当天开销 3.增加会员 4.删除会员 5.修改会员信息):

这个问题怎么解决啊。。。。。刚学3个月,不太明白怎么回事。。
...全文
467 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lzb4207123 2017-12-08
输入部分改成这样试试

char a[1024] = "";
while (scanf("%s",&a)<=0)
    {
        printf("输入错误,请重新选择\n");
        fflush(stdin);
        CDtwo();
    }
       n = a[0] - '0';
        if (n!=1&&n!=2&&n!=3&&n!=4&&n!=5)
            {
                printf("输入错误,请重新选择\n");
                   CDtwo();
            }
}
  • 打赏
  • 举报
回复
自信男孩 2017-12-08
 CDone();                           //返回该函数开头
这句可不是回到函数开头,这是递归,是在函数的基础上再调用自身。学名叫做递归;
CDtwo();
这地方也是,是递归; 为什么回到函数开头呢,直接继续输入就好了。
  • 打赏
  • 举报
回复
leetow2006 2017-12-08
递归函数CDone没有退出条件吗
  • 打赏
  • 举报
回复
qq_40305904 2017-12-08
可以编写一个防止暴力输入的函数,以字符串接收所输入的内容,判断字符数,当大于1时提示错误,当等于1时,利用acsii码值判断是否为1活其他数字,不符合条件时提示错误,符合时转换为int并返回。
  • 打赏
  • 举报
回复
赵4老师 2017-12-08
仅供参考:
#include <stdio.h>
#include <string.h>
char s[80];
int i;
char c;
int main() {
    while (1) {
        printf("Input a integer:");fflush(stdout);
        rewind(stdin);
        fgets(s,80,stdin);
        if (strlen(s)>10) {
            printf("Input too long(>9)!\n");
            continue;
        }
        if (2==sscanf(s,"%d%c",&i,&c)) {
            if ('\n'==c) {
                printf("%d is a integer.\n",i);
                break;
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" is NOT a integer!\n",s);
    }
    return 0;
}
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2017-12-07 11:50
社区公告
暂无公告