测试整数值以确定它在C ++中是奇数还是偶数

时间:2018-10-11 00:27:16

标签: c++

我必须编写一个程序来测试整数值,以确定它是奇数还是偶数,并确保我的输出清晰完整。换句话说,我必须编写类似"the value 4 is an even integer"的输出。还提示我必须使用余数取模来检查值。

我遇到的问题是scanf()函数。我收到语法错误:

  

'%='预期为')'

我该如何解决?

#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;

int main()
{
    int number = 0;

    cout << "enter an integer ";
    int scanf(%=2 , &number);

    if (number == 0)
        cout << "the value" << number << "is even";
    else
        cout << "the value" << number << "is odd";

    return 0;
}

2 个答案:

答案 0 :(得分:1)

您使用的scanf()错误(请阅读cppreference.com上的scanf() documentation)。第一个参数需要包含要扫描的格式的以空字符结尾的字符串,但是您不会传递任何类似于字符串的内容。根据C ++语言标准,您要传递的内容不是有效的字符串语法。这就是为什么您会遇到语法错误。

您需要更改此行:

int scanf(%=2 , &number);

为此:

scanf("%d", &number);

但是,在C ++中,您实际上应该使用std::cin代替输入(您已经使用std::cout进行输出了):

std::cin >> number;

尝试一下:

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

int main()
{
    int number = 0;

    cout << "enter an integer ";
    if (cin >> number)
    {
        if ((number % 2) == 0)
            cout << "the value " << number << " is even";
        else
            cout << "the value " << number << " is odd";
    }
    else
        cout << "the value is invalid";

    return 0;
}

答案 1 :(得分:0)

但是,如果您能够使用现代C ++功能,我知道这个问题有些陈旧。您可以编写一个constexpr辅助函数,如下所示:

#include <cstdint>

constexpr bool isEven(uint32_t value) {
    return ((value%2) == 0);
}

然后在主函数中,您可以遍历N个整数的循环并输出显示,例如:

#include <iostream>
#include <iomanip>

int main() {
    for ( int i = 0; i < 100; i++ ) {
         std::cout << std::setw(3) << std::setfill('0') << i << " is " 
                   << (isEven(i) ? "even" : "odd") << '\n';
    }

    return 0;
}

就这么简单。这是使用constexpr辅助函数的另一个不错的功能...您还可以这样格式化输出:

int main() {
    for ( int i = 0; i < 100; i++ ) {
         std::cout << std::setw(3) << std::setfill('0') << i << ": " 
                   << std::boolalpha << isEven(i) << '\n';
    }
    return true;
}

如果您正在寻找比使用模运算符更有效的方法,则可以按位&最低有效位...上面的代码将变为:

#include <cstdint>
constexpr bool isOdd(uint32_t value) {
    return (value&1);
}

并且使用它与上面的非常相似,只需确保您将输出中的措辞反转以匹配所使用的函数...

#include <iostream>
#include <iomanip>

int main() {
    for ( int i = 0; i < 100; i++ ) {
         std::cout << std::setw(3) << std::setfill('0') << i << " is " 
                   << (isOdd(i) ? "odd" : "even") << '\n';
    }
    return 0;
}

同样,您可以使用std::boolalpha机械手来获得这种输出:

int main() {
    for ( int i = 0; i < 100; i++ ) {
         std::cout << std::setw(3) << std::setfill('0') << i << ": " 
                   << std::boolalpha << isOdd(i) << '\n';
    }
    return true;
}