首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >负数输入法

负数输入法
EN

Stack Overflow用户
提问于 2022-09-06 08:52:49
回答 1查看 57关注 0票数 0
代码语言:javascript
复制
// ConsoleApplication6.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <limits>

int getInput() {

    while (true) {

        std::cout << "Indtast fire point-tal mellem 0 og 100: ";

        int number = 0;
        int number2 = 0;
        int number3 = 0;
        int number4 = 0;
        std::cin >> number;
        std::cin >> number2;
        std::cin >> number3;
        std::cin >> number4;
        int sum;
        sum = (number + number2 + number3 + number4) / 4;


        std::cout << "\n";

        if (std::cin.eof()) {
            std::cout << "Fejl, prøv igen!\n";
            std::cin.clear();
            continue;
        }

        if (std::cin.bad() || std::cin.fail()) {
            std::cout << "Ugyldigt input (fejl i input af tal).\n";
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            continue;
        }

        if (sum < 0 || sum > 100) {
            std::cout << "Ugyldigt input, det skal være mellem 0 og 100!.\n";
            continue;
        }

        return sum;
    }

    // unreachable
    return 0;
}

int main() {

    int sum = getInput();

    std::cout << "Gennemsnittet af antal point: ";
    std::cout << sum << std::endl;

    if (sum >= 90) {
        puts("Karakter: \n");
        puts("12");
    }
    else if (sum >= 80) {
        puts("Karakter: \n");
        puts("10");
    }
    else if (sum >= 70) {
        puts("Karakter: \n");
        puts("7");
    }
    else if (sum >= 60) {
        puts("Karakter: \n");
        puts("4");
    }
    else if (sum >= 50) {
        puts("Karakter: \n");
        puts("02");
    }
    else {
        puts("Karakter: \n");
        puts("00");
    }
}

目前,我的代码处理负输入的方式与正输入相同。但是我想实现一个"if“,它过滤负数,返回一个错误,可能还会重新启动循环。我该怎么做?

getInput()检索4个数字输入,如果将字母作为输入提交,如果输入不在0-100之间,则会出现错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-06 09:23:19

如果输入数字为负数,您可以创建一个inputPositive函数来读取输入,并将布尔值设置为true

代码语言:javascript
复制
void inputPositive(int& number, bool& negative) {
    std::cin >> number;
    if (number < 0) {
        negative = true;
    }
}

然后你可以调用这4个数字的这些函数。如果设置了负标志,我们使用continue;来返回while(true)的开始

代码语言:javascript
复制
while (true) {

    std::cout << "Indtast fire point-tal mellem 0 og 100: ";

    bool negative = false;

    int number = 0;
    int number2 = 0;
    int number3 = 0;
    int number4 = 0;

    inputPositive(number, negative);
    inputPositive(number2, negative);
    inputPositive(number3, negative);
    inputPositive(number4, negative);

    if (negative) {
        std::cout << "Invalid. Input only positive numbers\n\n"; 
        continue;
    }

    //...
}

产出:

代码语言:javascript
复制
Indtast fire point-tal mellem 0 og 100: 10 20 30 -40
Invalid. Input only positive numbers

Indtast fire point-tal mellem 0 og 100: 10 20 30 40

Gennemsnittet af antal point: 25

您应该在函数中使用std::array。它将缩短您的代码长度,并允许使用像std::accumulate这样的特性来计算和:

代码语言:javascript
复制
bool negative = false;

std::array<int, 4> numbers;
for (auto& i : numbers) {
    inputPositive(i, negative);
}
        
auto sum = std::accumulate(numbers.begin(), numbers.end(), 0) / numbers.size();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73619255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档