我被分配来编写这段代码,起初看起来很简单。我写了出来,试图尽我所能来理解它,真的以为我记下来了。但是,当我尝试使用VisualStudio检查代码时,会弹出代码错误,并且代码无法完成处理。
这是作业:
编写一个名为specialNumbers的函数,该函数计算并返回被3整除的两个目标数字之间的整数总数。该函数采用两个参数: 1.整数 2.结束,大于开始的整数 该函数返回3的整数倍,在开始和结束之间(包括3和2)。 例如,如果start = 3,end = 10,则该函数将返回3。
这是我到目前为止的代码:
#include <iostream>
using namespace std;
int specialNumbers(int start, int end) {
int count = 0;
for (int i = start; i < end; i++) {
if (i % 3 == 0)
count++;
}
return count;
}
int main() {
int a, b;
cout << "Enter two numbers to find total number of integars divisble by 3 between them" << endl;
cin >> a, b;
int n = specialNumbers(a, b);
cout << "Number of integars divisible by 3 between" << a << "and" << b << "are" << n << endl;
return 0;
}
显示的错误是
调试错误!变量b已使用且未初始化
答案 0 :(得分:3)
您使用错误的语法从cin
中提取了两个整数,应该是:
cin >> a >> b;
由于comma operator的语义,您的代码给出了“未初始化的错误”,该语义带有两个参数并返回后者。
简单地说,您的代码等效于:
(cin >> a), b; // ERROR: `b` isn't being initialized.
答案 1 :(得分:0)
更改更改此内容:
<div class="box">
<span>aa</span>
<span>b</span>
<span>ccc</span>
<span>d</span>
<span>eeee</span>
</div>
<div class="box">
<span>aa</span>
<span>b</span>
<span>eeee</span>
</div>
收件人:
cin >> a, b;
因为在这种情况下您完全不希望使用逗号运算符,而是使用cin >> a >> b;
运算符。
答案 2 :(得分:0)
其他答案涉及对cin
的正确使用,但是也存在算法错误。如果最后一个数字是3的倍数,则代码将返回错误的结果。
例如,如果输入数字4和6,则当6是3的倍数时应返回1时将返回0。
这可以通过更改来纠正:
for (int i = start; i < end; i++) {
到
for (int i = start; i <= end; i++) {
但是,当整数分开时,该算法效率极低。检查每个整数(例如15和2,000,000,000)将非常耗时。这就像将两个数字相乘,只是一遍又一遍地相加。
此代码首先会注意到,如果从起始值和结束值中减去3的倍数,则被3整除的值的数量将保持不变。
第二,执行此操作后,开始和结束之间的值(包括端值)将恰好是end/3
的值,如果start==0
因此,此代码将产生正确的答案而不会循环:
#include <iostream>
using namespace std;
int specialNumbers(int start, int end) {
int adj = 3 * (start / 3); // find and remove the multiples of 3 from start and end
start = start - adj; // start will now be either 0, 1 or 2
end = end - adj;
int count = end / 3; // count is the number of exact multiples of 3 in the sequence
if (start == 0) // unless the adjusted start is zero in which case it must be incremented
count++;
return count;
}
int main() {
int a, b;
while (1) {
cout << "Enter two numbers to find total number of integars divisble by 3 between them" << endl;
cin >> a >> b;
int n = specialNumbers(a, b);
cout << "Number of integars divisible by 3 between" << a << "and" << b << "are" << n << endl;
}
return 0;
}