游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2257|回复: 8

新手代码求助

[复制链接]

2

主题

50

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2008-5-21 23:31:00 | 显示全部楼层 |阅读模式
我是刚开始自学C++
编了一个输入数字的程序,意图是只能接受输入1-100内的数,可是运行发现,如果输入英文字字符
程序就乱了,求各位前辈给改改,讲解讲解
#include <iostream>
using namespace std;
int main()
{
    double zj;

    cout<<"请输入主角的敏捷(1到100内的整数)"<<endl ;
   
    cin>>zj;
  while(zj<1)
  {
         
                          
             cout<<"输入错误,请输入1到100内的整数"<<endl;
             cin>>zj;
  }
  while(zj>100)
  {
         while(zj<1)
                  {
                      cout<<"输入错误,请输入1到100内的整数"<<endl;
                      cin>>zj;
                  }
            
         cout<<"输入错误,请输入1到100内的整数"<<endl;
         cin>>zj;
  }

  
        cout<<"主角敏捷为"<<zj<<endl;
        cout<<"确定?(Y/N)"<<endl;
        system("pause");
        return 0;

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-5-22 09:25:00 | 显示全部楼层

Re:新手代码求助


  1.         int zj = 0;
  2.         cout<<"请输入主角的敏捷(1到100内的整数)"<<endl ;

  3.         while (!(cin>>zj) || zj < 1 || zj > 100)
  4.         {
  5.                 cout<<"输入错误,请输入1到100内的整数"<<endl;
  6.                 cin.clear();
  7.                 cin.sync();
  8.         }
  9.        
  10.         cout<<"主角敏捷为"<<zj<<endl;
复制代码

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-5-22 09:37:00 | 显示全部楼层

Re:新手代码求助

忘加说明了
int zj = 0;
既然要输入的是整数,定义成int就好了
while (!(cin>>zj) || zj < 1 || zj > 100)
如果输入的字符串不能转换成整数,zj根本不会被赋值,原来是多少还是多少,但cin的状态会被设置为失败,可以用
cin.fail()来检查,或者用!cin是一样的,上面写法相当于

  1. cin>>zj;
  2. while (cin.fail() || zj < 1 || zj >100)
复制代码

下面这两行

  1. cin.clear();
  2. cin.sync();
复制代码

用来重置输入的,如果去掉,你运行下就知道什么结果了
其它就没啥了

2

主题

50

帖子

54

积分

注册会员

Rank: 2

积分
54
 楼主| 发表于 2008-5-22 13:15:00 | 显示全部楼层

Re:新手代码求助

…………谢谢了 ,我刚学几天,不大看得懂修改后 的代码,能不 能用goto来弄呢?

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-5-22 13:56:00 | 显示全部楼层

Re:新手代码求助

怎么用goto? 我没用过goto,不熟.

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-5-22 14:14:00 | 显示全部楼层

Re:新手代码求助

不会用 ||, && 之类的逻辑运算符?

cin>>zj;
while (cin.fail() || (zj < 1) || (zj >100))
{
   cout<<"输入错误,请输入1到100内的整数"<<endl;
   cin.clear();
   cin.sync();
   cin>>zj;
}

输入zj;
当 ((输入.失败()) 或 (zj 小于 1) 或 (zj 大于 100))
{
    cout<<"输入错误,请输入1到100内的整数"<<endl;
    cin.clear(); //清除错误标志
    cin.sync(); //同步输入设备, 这两行先别管为啥了,这么写就是了
  重新输入zj;
}

2

主题

50

帖子

54

积分

注册会员

Rank: 2

积分
54
 楼主| 发表于 2008-5-22 16:19:00 | 显示全部楼层

Re:新手代码求助

太感谢了,我继续努力

2

主题

50

帖子

54

积分

注册会员

Rank: 2

积分
54
 楼主| 发表于 2008-5-22 17:02:00 | 显示全部楼层

Re:新手代码求助

cin>>zj;
while (cin.fail() || (zj < 1) || (zj >100))
{
   cout<<"输入错误,请输入1到100内的整数"<<endl;
   cin.clear();
   cin.sync();
   cin>>zj;
}
为什么必须最后有cin>>zj。而用while (!(cin>>zj) || zj < 1 || zj > 100)就不需要呢?

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2008-5-23 11:16:00 | 显示全部楼层

Re:新手代码求助

while (!(cin>>zj) || zj < 1 || zj > 100)
当然是把cin>>zj放在里面了,每次循环还是会执行一次。初学就先不要这么写了
写程序的时候一条语句是可以执行多个操作的,不过既然是刚开始学就每句一个操作好了,比较清楚。
cin>>zj实际是一个函数调用,前面那个!也是函数调用,并不是普通的操作符,是运算符重载的,不太好解释,
学完C++语法就知道了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 11:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表