注册 登录
编程论坛 C++教室

写了一个打分的程序,定义 float a[10],从键盘上输入分值,要求分值在 0~10 分之间。但是如果输入的是数字之外的字符,系统就会崩掉,这个该怎么处理?

babyd 发布于 2014-06-10 23:54, 758 次点击
写了一个打分的程序,定义float a[10],从键盘上输入分值,要求分值在0~10分之间。但是如果输入的是数字之外的字符,系统就会崩掉,这个该怎么处理????求帮助~~~~
8 回复
#2
rjsp2014-06-11 08:19
但是如果输入的是数字之外的字符,系统就会崩掉,这个该怎么处理?
------ 你是想实现“如果输入的是数字之外的字符,系统就会崩掉”这个功能?
还是想解决掉“如果输入的是数字之外的字符,系统就会崩掉”这个bug?
如果是后者,那说明你的代码有问题。既然是代码的问题,你不贴代码,神仙也猜不出来。
#3
律吕调阳2014-06-11 09:33
scanf("%*c%*[^\n]");
#4
babyd2014-06-11 15:05
回复 2 楼 rjsp
我是想解决这个Bug,这是循环打分的代码,有判断的部分,我想知道该怎么改才能解决这问题
float a[10];
for (int i = 0; i < 10; i++)
{
 cout << "第" << i + 1 << "项:";
 cin >> a[i];
 for (; a[i] < 0 || a[i]>10;){
 cout << "不符合打分要求,请重新打分:";
 cin >> a[i];
  }
}
#5
yangfrancis2014-06-11 15:15
for(;a[i]<0||a[i]>10;)改成while(a[i]<0||a[i]>10)看能不能解决
#6
yangfrancis2014-06-11 15:37
如果不能解决,试一下for(;a[i]<0||a[i]>10;)改成while((float)a[i]<0||(float)a[i]>10)看它招不招。
#7
i802862014-06-11 15:50
for (; a[i] < 0 || a[i]>10 || !cin;)
{
  cin.clear();
    cin.sync();
  cout << "不符合打分要求,请重新打分:";
  cin >> a[i];
}
#8
babyd2014-06-11 17:04
回复 6 楼 yangfrancis
不行啊,解决不了,它会一直输出cout的那句话
#9
律吕调阳2014-06-11 19:09
#include <iostream>
using namespace std;

int main()
{
    int i = 0;
    float a[3];
    while (1)
    {
        if (cin >> a[i])
        {
            if (a[i] >= 0.0&&a[i] <= 10.0)
                i++;
            if (i>=3)
                break;
            continue;
        }
        
        cin.clear();
        cin.sync();
        continue;
    }

    for (int i = 0; i<3; i++)
        cout << a[i] << endl;
    system("pause");
    return 0;
}
试试看行不行
1