我必须编写一个程序来测试整数值,以确定它是奇数还是偶数,并确保我的输出清晰完整。换句话说,我必须编写类似"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;
}
答案 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;
}